You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by GitBox <gi...@apache.org> on 2022/05/20 15:01:42 UTC
[GitHub] [shardingsphere] quzhixue-Kimi commented on issue #14976: We have two datasources, but choose the wrong one
quzhixue-Kimi commented on issue #14976:
URL: https://github.com/apache/shardingsphere/issues/14976#issuecomment-1133012559
hi there,
I just got the same issue, in which I have more than two data sources as below:
spring:
shardingsphere:
props:
sql:
show: true
allow.range.query.with.inline.sharding: true
datasource:
names: loan,accountpay,limit,blaze,customer,lm
loan:
driver-class-name: com.mysql.jdbc.Driver
password: pwd
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://127.0.0.1:3306/db-migration-test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
username: root
accountpay:
driver-class-name: com.mysql.jdbc.Driver
password: pwd
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://127.0.0.1:3306/db-migration-test-1?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
username: root
limit:
driver-class-name: com.mysql.jdbc.Driver
password: pwd
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://127.0.0.1:3306/db-migration-test-2?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
username: root
blaze:
driver-class-name: com.mysql.jdbc.Driver
password: pwd
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://127.0.0.1:3306/blaze?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
username: root
customer:
driver-class-name: com.mysql.jdbc.Driver
password: pwd
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://127.0.0.1:3306/loan_customer_center?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
username: root
lm:
driver-class-name: com.mysql.jdbc.Driver
password: pwd1
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://192.168.1.105:3306/accountinginside_trans1?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
username: root
sharding:
tables:
loan_lc_appl:
key-generator-column-name: id
actual-data-nodes: loan.loan_lc_appl_${1..10}
table-strategy:
standard:
sharding-column: apply_code
accountpay_order_bank_card:
key-generator-column-name: tx_log_seq
actual-data-nodes: accountpay.accountpay_order_bank_card_${1..10}
table-strategy:
standard:
sharding-column: biz_code
limit_cust_credit_limit_info:
key-generator-column-name: id
actual-data-nodes: limit.limit_cust_credit_limit_info_${1..10}
table-strategy:
standard:
sharding-column: cust_id
irce_blaze_rep_limit_amount:
key-generator-column-name: id
actual-data-nodes: blaze.irce_blaze_rep_limit_amount_${2021..2022}_${1..4}
table-strategy:
standard:
sharding-column: id
customer_basic_info:
key-generator-column-name: id
actual-data-nodes: customer.customer_basic_info_${1..5}
table-strategy:
standard:
sharding-column: cust_id
account_lm_loan:
key-generator-column-name: id
actual-data-nodes: lm.account_lm_loan_${1..6}
table-strategy:
standard:
sharding-column: id
When I run my java code within the blaze data source but, it will use the RANDOM data source () to run the SQL, which caused the error like:
[22:45:41.729] [mainraceId] [main] INFO ShardingSphere-SQL - Logic SQL: select count(*) from ( SELECT t1.grade_limit_amount AS total_amount, t1.id_num AS idcard_no FROM irce_blaze_rep_limit_amount as t1 join (select max(id) as id from irce_blaze_rep_limit_amount WHERE id_num is not null GROUP BY id_num) t2 on t1.id = t2.id WHERE t1.id_num is not null ) tt;
[22:45:41.729] [mainraceId] [main] INFO ShardingSphere-SQL - Actual SQL: lm ::: select count(*) from ( SELECT t1.grade_limit_amount AS total_amount, t1.id_num AS idcard_no FROM irce_blaze_rep_limit_amount as t1 join (select max(id) as id from irce_blaze_rep_limit_amount WHERE id_num is not null GROUP BY id_num) t2 on t1.id = t2.id WHERE t1.id_num is not null ) tt;
I wonder why the lm data source will be used instead of the blaze! AND, sometimes, it will choose another one, when I run the application again later, for this moment, the limit data source will be used!
[22:57:05.861] [mainraceId] [main] INFO ShardingSphere-SQL - Actual SQL: limit ::: select count(*) from ( SELECT t1.grade_limit_amount AS total_amount, t1.id_num AS idcard_no FROM irce_blaze_rep_limit_amount as t1 join (select max(id) as id from irce_blaze_rep_limit_amount WHERE id_num is not null GROUP BY id_num) t2 on t1.id = t2.id WHERE t1.id_num is not null ) tt;
And, for your information:
There are some data sources code as below, each one will scan the mapper folder respectively.
@Bean(name = "lmLoanMysqlDataSource")
@ConfigurationProperties(prefix = "spring.shardingsphere.datasource.lm")
public DataSource lmLoanMysqlDataSource() {
logger.info("lmLoan mysql datasource init....");
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "accountPayMysqlDataSource")
@ConfigurationProperties(prefix = "spring.shardingsphere.datasource.accountpay")
public DataSource accountPayMysqlDataSource() {
logger.info("account mysql datasource init....");
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "customerMysqlDataSource")
@ConfigurationProperties(prefix = "spring.shardingsphere.datasource.customer")
public DataSource customerMysqlDataSource() {
logger.info("customer mysql datasource init....");
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "gradeMysqlDataSource")
@ConfigurationProperties(prefix = "spring.shardingsphere.datasource.blaze")
public DataSource gradeMysqlDataSource() {
logger.info("grade mysql datasource init....");
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "limitMysqlDataSource")
@ConfigurationProperties(prefix = "spring.shardingsphere.datasource.limit")
public DataSource limitMysqlDataSource() {
logger.info("limit mysql datasource init....");
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "loanMysqlDataSource")
@ConfigurationProperties(prefix = "spring.shardingsphere.datasource.loan")
public DataSource loanMysqlDataSource() {
logger.info("loan mysql datasource init....");
return DruidDataSourceBuilder.create().build();
}
BR
Kimi
--
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-unsubscribe@shardingsphere.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org