问题描述
- 同样的代码,只是数据库地址不一样。
- 本地正常
- 开发环境正常
- 测试环境,查询数据库报错
[etms-payment-wallet-service,3f66d8b409c8de54,3f66d8b409c8de54,true] | ERROR | com.luoma.finance.service.impl.PaymentWalletDetailServiceImpl | http-nio-18800-exec-4 | getTransactionDiffReport() >> 调用异常 >> 入参:【dto = DiscrepancyCheck(period=202403, tenantId=1, isDelete=0)】,e:org.springframework.dao.InvalidDataAccessApiUsageException:### Error querying database. Cause: java.sql.SQLFeatureNotSupportedException: `org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection` cannot be unwrapped as `com.mysql.jdbc.MySQLConnection`The error may exist in class path resource [mapper/PaymentWalletAccountMapper.xml]### The error may involve defaultParameterMap### The error occurred while setting parameters### SQL: select recharge_order_number, pay_order_number, pay_currency_code, org_name, pay_status, pay_month, actual_pay_date, sum(pay_amount) AS total_pay_amount from payment_wallet_account where is_delete = ? and tenant_id = ? and actual_pay_month = ? group by recharge_order_number, pay_order_number, pay_currency_code, org_name, pay_status, pay_month, actual_pay_date### Cause: java.sql.SQLFeatureNotSupportedException: `org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection` cannot be unwrapped as `com.mysql.jdbc.MySQLConnection`; `org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection` cannot be unwrapped as `com.mysql.jdbc.MySQLConnection`; nested exception is java.sql.SQLFeatureNotSupportedException: `org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection` cannot be unwrapped as `com.mysql.jdbc.MySQLConnection`
shading 配置文件
dataSources:master_0:dataSourceClassName: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.jdbc.DriverjdbcUrl: jdbc:mysql://1.1.1.1:3306/test1111?serverTimezone=UTC&characterEncoding=utf-8&useSSL=falseusername: aaaaaaaapassword: aaaaaaaa# 这里进行分库分表的表,需要在ShardingConfig中进行热启动,否则第一次查询会很慢rules:- !SHARDINGtables:payment_wallet_iface:actualDataNodes: master_${0}.payment_wallet_iface_${2024}${(2..5).collect{it.toString().padLeft(2,'0')}}tableStrategy:standard:shardingColumn: pay_dateshardingAlgorithmName: pay_date_algorithmkeyGenerateStrategy:column: idkeyGeneratorName: snowflakepayment_wallet_detail:actualDataNodes: master_${0}.payment_wallet_detail_${2024}${(2..5).collect{it.toString().padLeft(2,'0')}}tableStrategy:standard:shardingColumn: pay_monthshardingAlgorithmName: pay_month_algorithmkeyGenerateStrategy:column: idkeyGeneratorName: snowflakepayment_wallet_account:actualDataNodes: master_${0}.payment_wallet_account_${2024}${(3..5).collect{it.toString().padLeft(2,'0')}}tableStrategy:standard:shardingColumn: actual_pay_monthshardingAlgorithmName: pay_month_algorithmkeyGenerateStrategy:column: idkeyGeneratorName: snowflakepayment_wallet_batch:actualDataNodes: master_${0}.payment_wallet_batch_${2024}${(2..5).collect{it.toString().padLeft(2,'0')}}tableStrategy:standard:shardingColumn: pay_monthshardingAlgorithmName: pay_month_algorithmkeyGenerateStrategy:column: idkeyGeneratorName: snowflakepayment_wallet_kv:actualDataNodes: master_${0}.payment_wallet_kv_${0..49}tableStrategy:complex:shardingColumns: reference_idshardingAlgorithmName: payment_wallet_kv_algorithmkeyGenerateStrategy:column: idkeyGeneratorName: snowflakepayment_wallet_transaction:actualDataNodes: master_${0}.payment_wallet_transaction_${0..49}tableStrategy:complex:shardingColumns: pay_order_numbershardingAlgorithmName: payment_wallet_transaction_algorithmkeyGenerateStrategy:column: idkeyGeneratorName: snowflakepayment_wallet_ap_check_batch:actualDataNodes: master_${0}.payment_wallet_ap_check_batch_${2024}${(2..5).collect{it.toString().padLeft(2,'0')}}tableStrategy:standard:shardingColumn: actual_pay_monthshardingAlgorithmName: pay_month_algorithmkeyGenerateStrategy:column: idkeyGeneratorName: snowflakepayment_wallet_ap_check_detail:actualDataNodes: master_${0}.payment_wallet_ap_check_detail_${2024}${(2..5).collect{it.toString().padLeft(2,'0')}}tableStrategy:standard:shardingColumn: actual_pay_monthshardingAlgorithmName: pay_month_algorithmkeyGenerateStrategy:column: idkeyGeneratorName: snowflakeshardingAlgorithms:pay_date_algorithm:type: CLASS_BASEprops:strategy: standardalgorithmClassName: com.luoma.finance.sharingrule.PayDateStandardShardingAlgorithmpay_month_algorithm:type: CLASS_BASE_PAY_MONTHprops:strategy: standardalgorithmClassName: com.luoma.finance.sharingrule.PayMonthAlgorithmpayment_wallet_kv_algorithm:type: CLASS_WALLET_KVprops:strategy: complexalgorithmClassName: com.luoma.finance.sharingrule.WalletKvShardingRulepayment_wallet_transaction_algorithm:type: CLASS_WALLET_PAY_ORDER_NUMBERprops:strategy: complexalgorithmClassName: com.luoma.finance.sharingrule.WalletPayOrderNumberShardingRulekeyGenerators:snowflake:type: SNOWFLAKE- !SINGLEtables:- "*.*"props:sql-show: true
问题分析
1.检查测试环境数据库连接,表是否创建
检查测试环境下面的数据库,用户名,密码是否能正常使用
检查报错查询的接口表是否创建
dataSources:master_0:dataSourceClassName: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.jdbc.DriverjdbcUrl: jdbc:mysql://a.a.a.a:3306/test1111?serverTimezone=UTC&characterEncoding=utf-8&useSSL=falseusername: aaaaaaaapassword: aaaaaaaa
2.检查 sharding 配置是否正确
- 拷贝测试环境报错的配置文件到本地,查询报错接口,看看是否正常
3.检查测试环境对应的 Jar 包是否正常
- 检查本地和测试环境编译生成的 Jar 包,看看对应版本和名称是否正常
4.本地启动 test 分支是否正常
- 正常
5.开发环境使用 test 分支发布是否正常
- 正常
6.本地使用 test 环境数据库是否正常
- 正常
问题解决
1.重新整理上传了 application.yml 文件
2.检查了表结构,发现缺失了一些字段
2.重新整理了 shading.yml 文件
dataSources:master_0:dataSourceClassName: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.jdbc.DriverjdbcUrl: jdbc:mysql://1.1.1.1:3306/test1111?serverTimezone=UTC&characterEncoding=utf-8&useSSL=falseusername: aaaaaaaapassword: aaaaaaaa# 这里进行分库分表的表,需要在ShardingConfig中进行热启动,否则第一次查询会很慢rules:- !SHARDINGtables:payment_wallet_iface:actualDataNodes: master_${0}.payment_wallet_iface_202${4..6}${(1..12).collect{it.toString().padLeft(2,'0')}}tableStrategy:standard:shardingColumn: pay_dateshardingAlgorithmName: pay_date_algorithmkeyGenerateStrategy:column: idkeyGeneratorName: snowflakepayment_wallet_detail:actualDataNodes: master_${0}.payment_wallet_detail_202${4..6}${(1..12).collect{it.toString().padLeft(2,'0')}}tableStrategy:standard:shardingColumn: pay_monthshardingAlgorithmName: pay_month_algorithmkeyGenerateStrategy:column: idkeyGeneratorName: snowflakepayment_wallet_account:actualDataNodes: master_${0}.payment_wallet_account_202${4..6}${(1..12).collect{it.toString().padLeft(2,'0')}}tableStrategy:standard:shardingColumn: actual_pay_monthshardingAlgorithmName: pay_month_algorithmkeyGenerateStrategy:column: idkeyGeneratorName: snowflakepayment_wallet_batch:actualDataNodes: master_${0}.payment_wallet_batch_202${4..6}${(1..12).collect{it.toString().padLeft(2,'0')}}tableStrategy:standard:shardingColumn: pay_monthshardingAlgorithmName: pay_month_algorithmkeyGenerateStrategy:column: idkeyGeneratorName: snowflakepayment_wallet_kv:actualDataNodes: master_${0}.payment_wallet_kv_${0..49}tableStrategy:complex:shardingColumns: reference_idshardingAlgorithmName: payment_wallet_kv_algorithmkeyGenerateStrategy:column: idkeyGeneratorName: snowflakepayment_wallet_transaction:actualDataNodes: master_${0}.payment_wallet_transaction_${0..49}tableStrategy:complex:shardingColumns: pay_order_numbershardingAlgorithmName: payment_wallet_transaction_algorithmkeyGenerateStrategy:column: idkeyGeneratorName: snowflakepayment_wallet_ap_check_batch:actualDataNodes: master_${0}.payment_wallet_ap_check_batch_202${4..6}${(1..12).collect{it.toString().padLeft(2,'0')}}tableStrategy:standard:shardingColumn: actual_pay_monthshardingAlgorithmName: pay_month_algorithmkeyGenerateStrategy:column: idkeyGeneratorName: snowflakepayment_wallet_ap_check_detail:actualDataNodes: master_${0}.payment_wallet_ap_check_detail_202${4..6}${(1..12).collect{it.toString().padLeft(2,'0')}}tableStrategy:standard:shardingColumn: actual_pay_monthshardingAlgorithmName: pay_month_algorithmkeyGenerateStrategy:column: idkeyGeneratorName: snowflakeshardingAlgorithms:pay_date_algorithm:type: CLASS_BASEprops:strategy: standardalgorithmClassName: com.luoma.finance.sharingrule.PayDateStandardShardingAlgorithmpay_month_algorithm:type: CLASS_BASE_PAY_MONTHprops:strategy: standardalgorithmClassName: com.luoma.finance.sharingrule.PayMonthAlgorithmpayment_wallet_kv_algorithm:type: CLASS_WALLET_KVprops:strategy: complexalgorithmClassName: com.luoma.finance.sharingrule.WalletKvShardingRulepayment_wallet_transaction_algorithm:type: CLASS_WALLET_PAY_ORDER_NUMBERprops:strategy: complexalgorithmClassName: com.luoma.finance.sharingrule.WalletPayOrderNumberShardingRulekeyGenerators:snowflake:type: SNOWFLAKE- !SINGLEtables:- "*.*"props:sql-show: true