apache / shardingsphere

Distributed SQL transaction & query engine for data sharding, scaling, encryption, and more - on any database.
Apache License 2.0
19.61k stars 6.66k forks source link

Shradding-jdbc Problem occurs after spring xml is configured #23768

Open 790477691 opened 1 year ago

790477691 commented 1 year ago

Which version of ShardingSphere did you use?

5.2.1

Which project did you use? ShardingSphere-JDBC or ShardingSphere-Proxy?

shardingsphere-jdbc-core

Expected behavior

normal start

Actual behavior

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [spring-datasource.xml]: Cannot resolve reference to bean 'oracleSource' while setting bean property 'targetDataSources' with key [TypedStringValue: value [oracleSource], target type [null]]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'oracleSource' defined in class path resource [spring-datasource.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: Failed to get driver instance for jdbcUrl=jdbc:h2:mem:config;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:378)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedMap(BeanDefinitionValueResolver.java:426)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:167)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1613)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1357)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367)
    ... 88 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'oracleSource' defined in class path resource [spring-datasource.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: Failed to get driver instance for jdbcUrl=jdbc:h2:mem:config;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1710)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:583)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367)
    ... 100 more
Caused by: java.lang.RuntimeException: Failed to get driver instance for jdbcUrl=jdbc:h2:mem:config;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
    at com.zaxxer.hikari.util.DriverDataSource.<init>(DriverDataSource.java:114)
    at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:321)
    at com.zaxxer.hikari.pool.PoolBase.<init>(PoolBase.java:110)
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:108)
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
    at org.apache.shardingsphere.mode.repository.standalone.jdbc.JDBCRepository.init(JDBCRepository.java:67)
    at org.apache.shardingsphere.infra.util.spi.type.required.RequiredSPIRegistry.getRegisteredService(RequiredSPIRegistry.java:45)
    at org.apache.shardingsphere.mode.repository.standalone.StandalonePersistRepositoryFactory.getInstance(StandalonePersistRepositoryFactory.java:44)
    at org.apache.shardingsphere.mode.manager.standalone.StandaloneContextManagerBuilder.build(StandaloneContextManagerBuilder.java:44)
    at org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereDataSource.createContextManager(ShardingSphereDataSource.java:76)
    at org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereDataSource.<init>(ShardingSphereDataSource.java:64)
    at org.apache.shardingsphere.driver.api.ShardingSphereDataSourceFactory.createDataSource(ShardingSphereDataSourceFactory.java:93)
    at org.apache.shardingsphere.driver.api.yaml.YamlShardingSphereDataSourceFactory.createDataSource(YamlShardingSphereDataSourceFactory.java:133)
    at org.apache.shardingsphere.driver.api.yaml.YamlShardingSphereDataSourceFactory.createDataSource(YamlShardingSphereDataSourceFactory.java:75)
    at org.apache.shardingsphere.driver.jdbc.core.driver.DriverDataSourceCache.createDataSource(DriverDataSourceCache.java:51)
    at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
    at org.apache.shardingsphere.driver.jdbc.core.driver.DriverDataSourceCache.get(DriverDataSourceCache.java:45)
    at org.apache.shardingsphere.driver.ShardingSphereDriver.connect(ShardingSphereDriver.java:51)
    at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156)
    at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:218)
    at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150)
    at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:787)
    at com.alibaba.druid.filter.FilterEventAdapter.connection_connect(FilterEventAdapter.java:38)
    at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150)
    at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:218)
    at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150)
    at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1645)
    at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1709)
    at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:932)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1835)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1778)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1706)
    ... 107 more
Caused by: java.sql.SQLException: No suitable driver
    at java.sql.DriverManager.getDriver(DriverManager.java:315)
    at com.zaxxer.hikari.util.DriverDataSource.<init>(DriverDataSource.java:106)
    ... 142 more

Reason analyze (If you can)

微信截图_20230128135335 微信截图_20230128135611

Steps to reproduce the behavior, such as: SQL to execute, sharding rule configuration, when exception occur etc.

Example codes for reproduce this issue (such as a github link).

spring-datasource.xml Key fragment

    <bean id="dataSource" class="com.uzhie.dataSoruce.DynamicDataSource">
        <property name="targetDataSources">
            <map>
                <entry key="mysqlSource" value-ref="mysqlSource"/>
                <entry key="mysqlSourceBj" value-ref="mysqlSourceBj"/>
                <entry key="oracleSource" value-ref="oracleSource"/>
            </map>
        </property>
        <property name="defaultTargetDataSource" ref="mysqlSource"/>
    </bean>

    <bean id="parentSource" class="com.alibaba.druid.pool.DruidDataSource">
        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="${jdbc.maxWait}"/>
        <!-- 初始大小 -->
        <property name="initialSize" value="${jdbc.initialSize}"/>
        <!-- 最小个数 -->
        <property name="minIdle" value="${jdbc.minIdle}"/>
        <!-- 最大个数 -->
        <property name="maxActive" value="${jdbc.maxActive}"/>

        <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
        <!--  如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。分库分表较多的数据库,建议配置为false。-->
        <property name="poolPreparedStatements" value="false"/>
        <property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>

        <property name="filters" value="${jdbc.filters}"/>
        <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}"/>
        <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}"/>
        <property name="testWhileIdle" value="${jdbc.testWhileIdle}"/>
        <property name="testOnBorrow" value="${jdbc.testOnBorrow}"/>
        <property name="testOnReturn" value="${jdbc.testOnReturn}"/>

        <!-- 启用监控 -->
        <property name="proxyFilters">
            <list>
                <ref bean="stat-filter"/>
            </list>
        </property>
        <property name="connectionProperties">
            <value>${jdbc.connproperty}</value>
        </property>
    </bean>

    <bean id="mysqlSource" parent="parentSource" init-method="init" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="validationQuery" value="select 1"/>
    </bean>
    <bean id="mysqlSourceBj" parent="parentSource" init-method="init" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName1}"/>
        <property name="url" value="${jdbc.url1}"/>
        <property name="username" value="${jdbc.username1}"/>
        <property name="password" value="${jdbc.password1}"/>
        <property name="validationQuery" value="select 1"/>
    </bean>
    <bean id="oracleSource" parent="parentSource" init-method="init" destroy-method="close">
        <property name="driverClassName" value="org.apache.shardingsphere.driver.ShardingSphereDriver"/>
        <property name="url" value="jdbc:shardingsphere:classpath:scratch.yaml" />
    </bean>

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                      http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.uzhie</groupId>
    <artifactId>mjm-web-server</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>

    <properties>
        <!-- junit 版本号 -->
        <junit.version>4.12</junit.version>
        <!-- log4j日志文件管理包版本 -->
        <slf4j.version>1.7.7</slf4j.version>
        <log4j.version>1.2.17</log4j.version>
        <spring.version>5.0.4.RELEASE</spring.version>
        <spring.data.version>2.0.0.RELEASE</spring.data.version>
        <fasterxml.jackson>2.9.0</fasterxml.jackson>
        <!-- redis 版本 -->
        <redis.version>2.9.0</redis.version>
        <kafka.version>2.0.0</kafka.version>
        <spring-kafka.version>2.2.0.RELEASE</spring-kafka.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <repositories>
        <repository>
            <id>central</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <layout>default</layout>
            <!-- 是否开启发布版构件下载 -->
            <releases>
                <enabled>true</enabled>
            </releases>
            <!-- 是否开启快照版构件下载 -->
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
</repositories>

    <dependencies>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>2.1.214</version>
        </dependency>
        <dependency>
            <groupId>com.oracle.database.nls</groupId>
            <artifactId>orai18n</artifactId>
            <version>11.2.0.4</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.shardingsphere/shardingsphere-jdbc-core -->
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-jdbc-core</artifactId>
            <version>5.2.1</version>
        </dependency>
        <dependency>
            <groupId>cn.easyproject</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>12.1.0.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.4.1</version>
        </dependency>
        <!-- mp 依赖 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>2.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.23</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.42.Final</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.9</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.32</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-websocket</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-messaging</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${fasterxml.jackson}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${fasterxml.jackson}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${fasterxml.jackson}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.20</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>
        <!-- mybatis核心包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
            <version>3.3.9</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.10</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.35</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>${spring.data.version}</version>
        </dependency>
        <dependency>
            <groupId>org.ehcache</groupId>
            <artifactId>ehcache</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.caches</groupId>
            <artifactId>mybatis-ehcache</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>25.1-jre</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.1.4</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.4.2.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.el</groupId>
            <artifactId>javax.el-api</artifactId>
            <version>2.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>javax.el</artifactId>
            <version>2.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.mina</groupId>
            <artifactId>mina-core</artifactId>
            <version>2.0.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-spring</artifactId>
            <version>5.14.3</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>commons-pool</groupId>
            <artifactId>commons-pool</artifactId>
            <version>1.6</version>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>${redis.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>${spring.data.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.jms</groupId>
            <artifactId>javax.jms-api</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-api</artifactId>
            <version>0.10.5</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-impl</artifactId>
            <version>0.10.5</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-jackson</artifactId>
            <version>0.10.5</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.6</version>
        </dependency>
        <!-- 构建Restful API -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- xxl-job-core -->
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.1.0</version>
        </dependency>
        <!-- commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>

        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
        <!--kafka-->
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka_2.12</artifactId>
            <version>${kafka.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <!--                <exclusion>-->
                <!--                    <artifactId>jmxri</artifactId>-->
                <!--                    <groupId>com.sun.jmx</groupId>-->
                <!--                </exclusion>-->
                <!--                <exclusion>-->
                <!--                    <artifactId>jms</artifactId>-->
                <!--                    <groupId>javax.jms</groupId>-->
                <!--                </exclusion>-->
                <!--                <exclusion>-->
                <!--                    <artifactId>jmxtools</artifactId>-->
                <!--                    <groupId>com.sun.jdmk</groupId>-->
                <!--                </exclusion>-->
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>${kafka.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
            <version>${spring-kafka.version}</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.0.1</version>
        </dependency>

        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.6</version>
        </dependency>

        <!--easypoi依赖-->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>4.1.3</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>4.1.3</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>4.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.13.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-clean-plugin</artifactId>
            <version>3.1.0</version>
        </dependency>

        <!--Lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
            <scope>provided</scope>
        </dependency>

        <!--smb访问远程共享文件夹-->
        <dependency>
            <groupId>org.samba.jcifs</groupId>
            <artifactId>jcifs</artifactId>
            <version>1.3.14-kohsuke-1</version>
        </dependency>

        <!-- apache ignite缓存-->
   <!--     <dependency>
            <groupId>org.apache.ignite</groupId>
            <artifactId>ignite-core</artifactId>
            <version>${ignite.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ignite</groupId>
            <artifactId>ignite-spring</artifactId>
            <version>${ignite.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ignite</groupId>
            <artifactId>ignite-indexing</artifactId>
            <version>${ignite.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>com.h2database</groupId>
                    <artifactId>h2</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.197</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ignite</groupId>
            <artifactId>ignite-rest-http</artifactId>
            <version>${ignite.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ignite</groupId>
            <artifactId>ignite-spring-data</artifactId>
            <version>${ignite.version}</version>
        </dependency>-->
    </dependencies>

    <profiles>
        <profile>
            <!-- 本地局域网配置文件 -->
            <id>local</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <filters>
                    <filter>
                        src/main/resource/local/log4j.properties
                    </filter>
                    <filter>
                        src/main/resource/local/db.properties
                    </filter>
                    <filter>
                        src/main/resource/local/redis.properties
                    </filter>
                    <filter>
                        src/main/resource/local/sys.properties
                    </filter>
                </filters>
            </build>
        </profile>
        <profile>
            <!-- 阿里云配置文件 -->
            <id>zz</id>
            <build>
                <filters>
                    <filter>
                        src/main/resource/zz/log4j.properties
                    </filter>
                    <filter>
                        src/main/resource/zz/db.properties
                    </filter>
                    <filter>
                        src/main/resource/zz/redis.properties
                    </filter>
                    <filter>
                        src/main/resource/zz/sys.properties
                    </filter>
                </filters>
            </build>
        </profile>
        <profile>
            <!-- MJM配置文件 -->
            <id>mjm</id>
            <build>
                <filters>
                    <filter>
                        src/main/resource/mjm/log4j.properties
                    </filter>
                    <filter>
                        src/main/resource/mjm/db.properties
                    </filter>
                    <filter>
                        src/main/resource/mjm/redis.properties
                    </filter>
                    <filter>
                        src/main/resource/mjm/sys.properties
                    </filter>
                </filters>
            </build>
        </profile>
        <profile>
            <id>temp</id>
            <!--<activation>-->
            <!--<activeByDefault>true</activeByDefault>-->
            <!--</activation>-->
            <build>
                <filters>
                    <filter>
                        src/main/resource/temp/log4j.properties
                    </filter>
                    <filter>
                        src/main/resource/temp/db.properties
                    </filter>
                    <filter>
                        src/main/resource/temp/redis.properties
                    </filter>
                    <filter>
                        src/main/resource/temp/sys.properties
                    </filter>
                </filters>
            </build>
        </profile>
    </profiles>

    <build>
        <finalName>mjm-web-server</finalName>
        <resources>
            <resource>
                <directory>src/main/resource</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resource</directory>
                <includes>
                    <include>log4j.properties</include>
                    <include>db.properties</include>
                    <include>redis.properties</include>
                    <include>sys.properties</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>

        <plugins>
            <!-- jdk版本1.8 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>utf-8</encoding>
                </configuration>
            </plugin>

            <!--打包跳过测试类-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <testFailureIgnore>true</testFailureIgnore>
                    <skip>true</skip>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-installed</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>${project.groupId}</groupId>
                                    <artifactId>${project.artifactId}</artifactId>
                                    <version>${project.version}</version>
                                    <type>${project.packaging}</type>
                                </artifactItem>
                            </artifactItems>
                            <outputDirectory>target/lib</outputDirectory>
                        </configuration>
                    </execution>
                    <execution>
                        <id>copy-lib</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                            <includeScope>compile</includeScope>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

scratch.yaml

databaseName: oracleSource

dataSources:
  oracleSource1:
    dataSourceClassName: com.alibaba.druid.pool.DruidDataSource
    driverClassName: oracle.jdbc.driver.OracleDriver
    jdbcUrl: jdbc:oracle:thin:@111.111.111.11:9521:road
    username: road
    password: road
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
  oracleSource2:
    dataSourceClassName: com.alibaba.druid.pool.DruidDataSource
    driverClassName: oracle.jdbc.driver.OracleDriver
    jdbcUrl: jdbc:oracle:thin:@111.111.111.11:9521:road1
    username: road1
    password: road1
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
  oracleSource3:
    dataSourceClassName: com.alibaba.druid.pool.DruidDataSource
    driverClassName: oracle.jdbc.driver.OracleDriver
    jdbcUrl: jdbc:oracle:thin:@111.111.111.11:9521:road2
    username: road2
    password: road2
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1

rules:
  - !SHARDING
    tables:
      MJM_GPS_RECORD:
        actualDataNodes: oracleSource${1..3}.MJM_GPS_RECORD
        databaseStrategy:
          standard:
            shardingColumn: TELEPHONE
            shardingAlgorithmName: hint_test
      MJM_JS_ATTACHMENT:
        actualDataNodes: oracleSource${1..3}.MJM_JS_ATTACHMENT
        databaseStrategy:
          standard:
            shardingColumn: SIM_NUMBER
            shardingAlgorithmName: hint_test
      MJM_JS_BLIND_AREA:
        actualDataNodes: oracleSource${1..3}.MJM_JS_BLIND_AREA
        databaseStrategy:
          standard:
            shardingColumn: SIM_NUMBER
            shardingAlgorithmName: hint_test
      MJM_JS_DRIVER_STATUS:
        actualDataNodes: oracleSource${1..3}.MJM_JS_DRIVER_STATUS
        databaseStrategy:
          standard:
            shardingColumn: SIM_NUMBER
            shardingAlgorithmName: hint_test
      MJM_JS_DRIVING_ASS:
        actualDataNodes: oracleSource${1..3}.MJM_JS_DRIVING_ASS
        databaseStrategy:
          standard:
            shardingColumn: SIM_NUMBER
            shardingAlgorithmName: hint_test
      MJM_WARNING:
        actualDataNodes: oracleSource${1..3}.MJM_WARNING
        databaseStrategy:
          standard:
            shardingColumn: SIM_NUMBER
            shardingAlgorithmName: hint_test
    bindingTables:
      - MJM_GPS_RECORD,MJM_JS_ATTACHMENT,MJM_JS_BLIND_AREA,MJM_JS_DRIVER_STATUS,MJM_JS_DRIVING_ASS,MJM_WARNING
    broadcastTables:
      - MJM_REPORT_LAST_POSITION,MJM_8702,T_SERVER_DB,T_GPS_RECORD_LOG_JOB,MJM_PICTURE_MATCH

#    defaultDatabaseStrategy:
#      hint:
#        shardingColumn:
#        shardingAlgorithmName: hint_test
#    defaultTableStrategy:
#      none:

    shardingAlgorithms:
      hint_test:
        type: HINT_TEST
props:
  max-connections-size-per-query: 1
  kernel-executor-size: 16  # Infinite by default.
  proxy-frontend-flush-threshold: 128  # The default value is 128.
  proxy-hint-enabled: true
  sql-show: true
  check-table-metadata-enabled: false
RaigorJiang commented 1 year ago

@790477691 I found that you have multiple <artifactId>h2</artifactId> in your dependencies, please check.

And this issue is similar to #23543.

790477691 commented 1 year ago

@RaigorJiang The same goes for removing h2 references

790477691 commented 1 year ago

I used DruidDataSource but somehow changed to HikariDataSource, load configuration still null, using shardingjdbc's default parameter

RaigorJiang commented 1 year ago

The exception message tells us that no suitable driver can be found, can you investigate the maven dependencies, or provide a reproducible demo project?

zhchhawks commented 1 year ago

I got the same problem, did this problem solved?

zhchhawks commented 1 year ago

I found that shardingsphere use h2 as default way to save sharding rule info when we choose standard mode, but h2 driver not register in DriverManager. Just register it to solve the problem.

zhaojinchao95 commented 1 year ago

@790477691 @zhchhawks Can you provide a reproducible demo project for us to check.

zhchhawks commented 1 year ago

I use java API in my old frame project like this without spring boot :

ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration(); shardingRuleConfig.getTables().add(getXxxTableRuleConfigurationNb()); shardingRuleConfig.getBindingTableGroups() .add(new ShardingTableReferenceRuleConfiguration(SHARDING_KEY, SHARDING_TABLE_LIST)); shardingRuleConfig.setDefaultShardingColumn(SHARDING_KEY); Properties tableShardingAlgorithmrProps = new Properties(); tableShardingAlgorithmrProps.setProperty("strategy", "STANDARD"); tableShardingAlgorithmrProps.setProperty("algorithmClassName", "Algorithm class getName"); shardingRuleConfig.getShardingAlgorithms() .put(ALGORITHM_NAME, new AlgorithmConfiguration("CLASS_BASED", tableShardingAlgorithmrProps)); shardingRuleConfig.setDefaultTableShardingStrategy(new StandardShardingStrategyConfiguration( SHARDING_KEY, ALGORITHM_NAME)); ModeConfiguration modeConfiguration = new ModeConfiguration("Standalone", new StandalonePersistRepositoryConfiguration("JDBC", new Properties())); return ShardingSphereDataSourceFactory.createDataSource(modeConfiguration, createDataSourceMap(), Collections.singleton(shardingRuleConfig), new Properties());

TeslaCN commented 1 year ago

If your application is packed as WAR and deployed to server like Tomcat. You may try executing Class.forName("org.h2.Driver") before initializing ShardingSphere-JDBC or adding

<bean id="h2Driver" class="org.h2.Driver" />

<bean id="yourDataSource" depends-on="h2Driver">
zhchhawks commented 1 year ago

Yes,that's the situation you're talking about.

yangyu4143 commented 1 year ago

If your application is packed as WAR and deployed to server like Tomcat. You may try executing Class.forName("org.h2.Driver") before initializing ShardingSphere-JDBC or adding

<bean id="h2Driver" class="org.h2.Driver" />

<bean id="yourDataSource" depends-on="h2Driver">

There is a new problem after I configured with this way.

IMG_20230317_100800 IMG_20230317_100951 IMG_20230317_101137

huntwhat commented 1 year ago

If your application is packed as WAR and deployed to server like Tomcat. You may try executing Class.forName("org.h2.Driver") before initializing ShardingSphere-JDBC or adding

<bean id="h2Driver" class="org.h2.Driver" />

<bean id="yourDataSource" depends-on="h2Driver">

This should solve the problem, but should you upgrade the shardingsphere to solve the problem

zhchhawks commented 1 year ago

I have another question. My project uses an internal DataSource of the company. This data source has many extra functions. When serializing and deserializing the data source, I encounter various problems. Why does shardingsphere store the serialized data source into db2? Can I configure not to perform this step? My application scenario is very simple and does not require distributed configuration management.

For example, my DataSource has a getXXX static method that causes deserialization to fail, and another example is that there are some monitoring and other connections in the data source, and serialization and deserialization cause initializing the data source (a very heavy process) to be executed twice.

RaigorJiang commented 1 year ago

Hi @zhaojinchao95 , When the mode is not configured, it is stored in memory by default, and there is no need to interact with H2, right?

I have another question. My project uses an internal DataSource of the company. This data source has many extra functions. When serializing and deserializing the data source, I encounter various problems. Why does shardingsphere store the serialized data source into db2? Can I configure not to perform this step? My application scenario is very simple and does not require distributed configuration management.

For example, my DataSource has a getXXX static method that causes deserialization to fail, and another example is that there are some monitoring and other connections in the data source, and serialization and deserialization cause initializing the data source (a very heavy process) to be executed twice.

zhaojinchao95 commented 1 year ago

Hi @zhaojinchao95 , When the mode is not configured, it is stored in memory by default, and there is no need to interact with H2, right?

I have another question. My project uses an internal DataSource of the company. This data source has many extra functions. When serializing and deserializing the data source, I encounter various problems. Why does shardingsphere store the serialized data source into db2? Can I configure not to perform this step? My application scenario is very simple and does not require distributed configuration management. For example, my DataSource has a getXXX static method that causes deserialization to fail, and another example is that there are some monitoring and other connections in the data source, and serialization and deserialization cause initializing the data source (a very heavy process) to be executed twice.

Yeah, you are right.

zhchhawks commented 1 year ago

Hi @zhaojinchao95 , When the mode is not configured, it is stored in memory by default, and there is no need to interact with H2, right?

I have another question. My project uses an internal DataSource of the company. This data source has many extra functions. When serializing and deserializing the data source, I encounter various problems. Why does shardingsphere store the serialized data source into db2? Can I configure not to perform this step? My application scenario is very simple and does not require distributed configuration management. For example, my DataSource has a getXXX static method that causes deserialization to fail, and another example is that there are some monitoring and other connections in the data source, and serialization and deserialization cause initializing the data source (a very heavy process) to be executed twice.

Does mode mean ModeConfiguration? In fact, the default implementation of ContextManagerBuilder is still StandaloneContextManagerBuilder. which the configuration still saved to h2 and leads to the problem I mentioned above. I'm using version 5.3.1