wangwangwangBoy commented on issue #12703:
URL:
https://github.com/apache/shardingsphere/issues/12703#issuecomment-927271306
> > @wangwangwangBoy
> > Let me talk about raw java first, I verified the problem:
> >
> > 1. Your bean `DruidDataSource` is declared as @primary, so Mybatis will
not get the beans created by shardingsphere when using DataSource.
> > 2. You can create SqlSessionFactoryBean by yourself and specify the bean
constructed using shardingsphere, so that your goal can be achieved.
> >
> > sample code :
> > ```java
> > @Bean("sharding")
> > public DataSource dataSource() throws SQLException {
> > Map<String, DataSource> dataSourceMap = new HashMap<>(0);
> > dataSourceMap.put("my_test_db", createDataSource());
> > ......
> > ```
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > ```java
> > @Bean
> > public SqlSessionFactoryBean
mysqlSessionFactory(@Qualifier("sharding") DataSource dataSource) throws
Exception {
> > SqlSessionFactoryBean sqlSessionFactoryBean = new
SqlSessionFactoryBean();
> > sqlSessionFactoryBean.setDataSource(dataSource);
> > PathMatchingResourcePatternResolver resolver = new
PathMatchingResourcePatternResolver();
> >
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));
> > return sqlSessionFactoryBean;
> > }
> > ```
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > My test log shows that the custom algorithm has been used:
> > ```
> > ### Cause: java.lang.UnsupportedOperationException: No available tables
according input time:202007] with root cause
> >
> > java.lang.UnsupportedOperationException: No available tables according
input time:202007
> > at
com.mine.shardingjdbc.myconfig.TableShardingAlgorithm.doSharding(TableShardingAlgorithm.java:51)
~[classes/:na]
> > at
org.apache.shardingsphere.sharding.route.strategy.type.standard.StandardShardingStrategy.doSharding(StandardShardingStrategy.java:68)
~[shardingsphere-sharding-core-5.0.0-beta.jar:5.0.0-beta]
> > at
org.apache.shardingsphere.sharding.route.strategy.type.standard.StandardShardingStrategy.doSharding(StandardShardingStrategy.java:57)
~[shardingsphere-sharding-core-5.0.0-beta.jar:5.0.0-beta]
> > at
org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingStandardRoutingEngine.routeTables(ShardingStandardRoutingEngine.java:214)
~[shardingsphere-sharding-core-5.0.0-beta.jar:5.0.0-beta]
> > at
org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingStandardRoutingEngine.route0(ShardingStandardRoutingEngine.java:194)
~[shardingsphere-sharding-core-5.0.0-beta.jar:5.0.0-beta]
> > at
org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingStandardRoutingEngine.routeByShardingConditionsWithCondition(ShardingStandardRoutingEngine.java:114)
~[shardingsphere-sharding-core-5.0.0-beta.jar:5.0.0-beta]
> > at
org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingStandardRoutingEngine.routeByShardingConditions(ShardingStandardRoutingEngine.java:107)
~[shardingsphere-sharding-core-5.0.0-beta.jar:5.0.0-beta]
> > at
org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingStandardRoutingEngine.getDataNodes(ShardingStandardRoutingEngine.java:84)
~[shardingsphere-sharding-core-5.0.0-beta.jar:5.0.0-beta]
> > at
org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingStandardRoutingEngine.route(ShardingStandardRoutingEngine.java:69)
~[shardingsphere-sharding-core-5.0.0-beta.jar:5.0.0-beta]
> > at
org.apache.shardingsphere.sharding.route.engine.ShardingSQLRouter.createRouteContext(ShardingSQLRouter.java:61)
~[shardingsphere-sharding-core-5.0.0-beta.jar:5.0.0-beta]
> > at
org.apache.shardingsphere.sharding.route.engine.ShardingSQLRouter.createRouteContext(ShardingSQLRouter.java:47)
~[shardingsphere-sharding-core-5.0.0-beta.jar:5.0.0-beta]
> > at
org.apache.shardingsphere.infra.route.engine.impl.PartialSQLRouteExecutor.route(PartialSQLRouteExecutor.java:62)
~[shardingsphere-infra-route-5.0.0-beta.jar:5.0.0-beta]
> > at
org.apache.shardingsphere.infra.route.engine.SQLRouteEngine.route(SQLRouteEngine.java:52)
~[shardingsphere-infra-route-5.0.0-beta.jar:5.0.0-beta]
> > at
org.apache.shardingsphere.infra.context.kernel.KernelProcessor.route(KernelProcessor.java:54)
~[shardingsphere-infra-context-5.0.0-beta.jar:5.0.0-beta]
> > at
org.apache.shardingsphere.infra.context.kernel.KernelProcessor.generateExecutionContext(KernelProcessor.java:46)
~[shardingsphere-infra-context-5.0.0-beta.jar:5.0.0-beta]
> > at
org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement.createExecutionContext(ShardingSpherePreparedStatement.java:363)
~[shardingsphere-jdbc-core-5.0.0-beta.jar:5.0.0-beta]
> > at
org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement.execute(ShardingSpherePreparedStatement.java:271)
~[shardingsphere-jdbc-core-5.0.0-beta.jar:5.0.0-beta]
> > at
org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:46)
~[mybatis-3.4.6.jar:3.4.6]
> > at
org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)
~[mybatis-3.4.6.jar:3.4.6]
> > at
org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
~[mybatis-3.4.6.jar:3.4.6]
> > at
org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
~[mybatis-3.4.6.jar:3.4.6]
> > ```
>
> It is really the case. After I inject SQLSessionFactory into it, it can
work. Your team is really too strong. Thank you very very much!
Earlier I used Sharding-JDBC 4.0, but it was not very friendly to
sub-queries and often reported errors. I listened to my friends’ suggestions to
upgrade to 5.x, but found its configuration is different from 4.x, and then out
So many questions, thank you very, very much.
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]