fxgang opened a new issue, #34286: URL: https://github.com/apache/shardingsphere/issues/34286
## 配置文件 spring.datasource.driver-class-name=org.apache.shardingsphere.driver.ShardingSphereDriver spring.datasource.url=jdbc:shardingsphere:classpath:sharding.yaml ##sharding.yaml dataSources: ds_11: driverClassName: com.mysql.cj.jdbc.Driver dataSourceClassName: com.zaxxer.hikari.HikariDataSource #jdbcUrl: jdbc:mysql://10.8.0.1:3381/db_assistant?useUnicode=true&charset=utf8mb4&serverTimezone=UTC&useSSL=false&useOldAliasMetadataBehavior=true jdbcUrl: jdbc:mysql://10.8.0.1:3381/db_platform?useUnicode=true&charset=utf8mb4&useSSL=false&useOldAliasMetadataBehavior=true username: root password: qaz@123#PY ds_21: driverClassName: com.mysql.cj.jdbc.Driver dataSourceClassName: com.zaxxer.hikari.HikariDataSource jdbcUrl: jdbc:mysql://10.8.0.9:3381/db_platform?useUnicode=true&charset=utf8mb4&useSSL=false&useOldAliasMetadataBehavior=true username: root password: qaz@123#PY ds_31: driverClassName: com.mysql.cj.jdbc.Driver dataSourceClassName: com.zaxxer.hikari.HikariDataSource jdbcUrl: jdbc:mysql://10.8.0.13:3381/db_platform?useUnicode=true&charset=utf8mb4&useSSL=false&useOldAliasMetadataBehavior=true username: root password: qaz@123#PY rules: - !SINGLE tables: - "*.*" defaultDataSource: ds_11 - !READWRITE_SPLITTING dataSources: readwrite_ds: writeDataSourceName: ds_11 readDataSourceNames: - ds_21 - ds_31 transactionalReadQueryStrategy: PRIMARY loadBalancerName: random loadBalancers: random: type: RANDOM props: sql-show: true ## 启动文件配置 @EntityScan(basePackages = {"com.ks.common.springboot.starter.server.entity"}) @EnableConfigurationProperties(KsDataSourceProperties.class) @SpringBootApplication//(exclude = DataSourceAutoConfiguration.class) public class PlatformServiceApplication { public static void main(String[] args) { SpringApplication.run(PlatformServiceApplication.class, args); } } ## 修改为代码方式 @Component public class DataSourceProvider { public DataSource getDataSource() throws SQLException { ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig = new ReadwriteSplittingDataSourceRuleConfiguration( "demo_read_query_ds", "demo_write_ds", Arrays.asList("demo_read_ds_0", "demo_read_ds_1"), "demo_weight_lb"); Properties algorithmProps = new Properties(); algorithmProps.setProperty("demo_read_ds_0", "2"); algorithmProps.setProperty("demo_read_ds_1", "1"); Map<String, AlgorithmConfiguration> algorithmConfigMap = new HashMap<>(); algorithmConfigMap.put("demo_weight_lb", new AlgorithmConfiguration("WEIGHT", algorithmProps)); ReadwriteSplittingRuleConfiguration ruleConfig = new ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceConfig), algorithmConfigMap); Properties props = new Properties(); props.setProperty("sql-show", Boolean.TRUE.toString()); return ShardingSphereDataSourceFactory.createDataSource(createDataSourceMap(), Collections.singleton(ruleConfig), props); } private Map<String, DataSource> createDataSourceMap() { DataSource masterDataSource = DataSourceBuilder.create().url("jdbc:mysql://10.8.0.1:3381/db_platform").username("root").password("qaz@123#PY").build(); DataSource slaveDataSource1 = DataSourceBuilder.create().url("jdbc:mysql://10.8.0.9:3381/db_platform").username("root").password("qaz@123#PY").build(); DataSource slaveDataSource2 = DataSourceBuilder.create().url("jdbc:mysql://10.8.0.13:3381/db_platform").username("root").password("qaz@123#PY").build(); Map<String, DataSource> result = new HashMap<>(); result.put("demo_write_ds", masterDataSource); result.put("demo_read_ds_0", slaveDataSource1); result.put("demo_read_ds_1", slaveDataSource2); return result; } } @Configuration public class ShardingSphereConfig { private static final Logger logger = LoggerFactory.getLogger(ShardingSphereConfig.class); @Resource private DataSourceProvider dataSourceProvider; @Bean public DataSource masterSlaveDataSource() throws SQLException { logger.info("初始化Sharding数据源... ..."); return dataSourceProvider.getDataSource(); } } ## 同时修改启动文件 @EntityScan(basePackages = {"com.ks.common.springboot.starter.server.entity"}) @EnableConfigurationProperties(KsDataSourceProperties.class) @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) public class PlatformServiceApplication { public static void main(String[] args) { SpringApplication.run(PlatformServiceApplication.class, args); } } ## 测试报错 2025-01-08 23:32:28 DEBUG [main] org.hibernate.SQL select t1_0.id,t1_0.create_time,t1_0.create_user,t1_0.db,t1_0.driver_class_name,t1_0.`host`,t1_0.`key`,t1_0.`password`,t1_0.`port`,t1_0.`role`,t1_0.service,t1_0.state,t1_0.type,t1_0.update_time,t1_0.update_user,t1_0.`user`,t1_0.version from t_server t1_0 where t1_0.id=? org.apache.shardingsphere.infra.exception.kernel.metadata.TableNotFoundException: Table or view 't_server' does not exist. at org.apache.shardingsphere.infra.binder.segment.from.impl.SimpleTableSegmentBinder.lambda$checkTableExists$4(SimpleTableSegmentBinder.java:151) at org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions.checkState(ShardingSpherePreconditions.java:41) at org.apache.shardingsphere.infra.binder.segment.from.impl.SimpleTableSegmentBinder.checkTableExists(SimpleTableSegmentBinder.java:148) at org.apache.shardingsphere.infra.binder.segment.from.impl.SimpleTableSegmentBinder.bind(SimpleTableSegmentBinder.java:84) at org.apache.shardingsphere.infra.binder.segment.from.TableSegmentBinder.bind(TableSegmentBinder.java:55) at org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementBinder.lambda$bind$1(SelectStatementBinder.java:60) at java.base/java.util.Optional.map(Optional.java:260) at org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementBinder.bind(SelectStatementBinder.java:60) at org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementBinder.bind(SelectStatementBinder.java:48) at org.apache.shardingsphere.infra.binder.engine.SQLBindEngine.bindDMLStatement(SQLBindEngine.java:82) at org.apache.shardingsphere.infra.binder.engine.SQLBindEngine.bind(SQLBindEngine.java:72) at org.apache.shardingsphere.infra.binder.engine.SQLBindEngine.bind(SQLBindEngine.java:63) at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement.<init>(ShardingSpherePreparedStatement.java:207) at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement.<init>(ShardingSpherePreparedStatement.java:176) at org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection.prepareStatement(ShardingSphereConnection.java:99) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$4.doPrepare(StatementPreparerImpl.java:151) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:180) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:153) at org.hibernate.sql.exec.internal.StandardStatementCreator.createStatement(StandardStatementCreator.java:49) at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:235) at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.getResultSet(DeferredResultSetAccess.java:171) at org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.<init>(JdbcValuesResultSetImpl.java:74) at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.resolveJdbcValuesSource(JdbcSelectExecutorStandardImpl.java:355) at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:137) at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:102) at org.hibernate.sql.exec.spi.JdbcSelectExecutor.executeQuery(JdbcSelectExecutor.java:91) at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:165) at org.hibernate.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:145) at org.hibernate.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:117) at org.hibernate.loader.ast.internal.SingleIdEntityLoaderStandardImpl.load(SingleIdEntityLoaderStandardImpl.java:74) at org.hibernate.persister.entity.AbstractEntityPersister.doLoad(AbstractEntityPersister.java:3895) at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3884) at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:604) at org.hibernate.event.internal.DefaultLoadEventListener.loadFromCacheOrDatasource(DefaultLoadEventListener.java:590) at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:560) at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:544) at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:206) at org.hibernate.event.internal.DefaultLoadEventListener.loadWithRegularProxy(DefaultLoadEventListener.java:289) at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:241) at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:110) at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:69) at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:138) at org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1229) at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1217) at org.hibernate.loader.internal.IdentifierLoadAccessImpl.load(IdentifierLoadAccessImpl.java:210) at org.hibernate.loader.internal.IdentifierLoadAccessImpl.doLoad(IdentifierLoadAccessImpl.java:161) at org.hibernate.loader.internal.IdentifierLoadAccessImpl.lambda$load$1(IdentifierLoadAccessImpl.java:150) at org.hibernate.loader.internal.IdentifierLoadAccessImpl.perform(IdentifierLoadAccessImpl.java:113) at org.hibernate.loader.internal.IdentifierLoadAccessImpl.load(IdentifierLoadAccessImpl.java:150) at org.hibernate.internal.SessionImpl.find(SessionImpl.java:2459) at org.hibernate.internal.SessionImpl.find(SessionImpl.java:2430) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:320) at jdk.proxy2/jdk.proxy2.$Proxy165.find(Unknown Source) at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findById(SimpleJpaRepository.java:323) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:277) at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:170) at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:515) at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:284) at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:752) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:174) at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:149) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:69) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:380) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:138) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:165) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.data.repository.core.support.MethodInvocationValidator.invoke(MethodInvocationValidator.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) at jdk.proxy2/jdk.proxy2.$Proxy171.findById(Unknown Source) at com.ks.platformservice.PlatformServiceApplicationTests.getServerList(PlatformServiceApplicationTests.java:63) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: notifications-unsubscr...@shardingsphere.apache.org.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org