Java-org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection cannot be unwrap

2024年03月28日 10:58 · 阅读(493) ·

问题描述

  • 同样的代码,只是数据库地址不一样。
  • 本地正常
  • 开发环境正常
  • 测试环境,查询数据库报错
  1. [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:
  2. org.springframework.dao.InvalidDataAccessApiUsageException:
  3. ### Error querying database. Cause: java.sql.SQLFeatureNotSupportedException: `org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection` cannot be unwrapped as `com.mysql.jdbc.MySQLConnection`
  4. The error may exist in class path resource [mapper/PaymentWalletAccountMapper.xml]
  5. ### The error may involve defaultParameterMap
  6. ### The error occurred while setting parameters
  7. ### 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
  8. ### Cause: java.sql.SQLFeatureNotSupportedException: `org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection` cannot be unwrapped as `com.mysql.jdbc.MySQLConnection`
  9. ; `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 配置文件

  1. dataSources:
  2. master_0:
  3. dataSourceClassName: com.zaxxer.hikari.HikariDataSource
  4. driverClassName: com.mysql.jdbc.Driver
  5. jdbcUrl: jdbc:mysql://1.1.1.1:3306/test1111?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false
  6. username: aaaaaaaa
  7. password: aaaaaaaa
  8. # 这里进行分库分表的表,需要在ShardingConfig中进行热启动,否则第一次查询会很慢
  9. rules:
  10. - !SHARDING
  11. tables:
  12. payment_wallet_iface:
  13. actualDataNodes: master_${0}.payment_wallet_iface_${2024}${(2..5).collect{it.toString().padLeft(2,'0')}}
  14. tableStrategy:
  15. standard:
  16. shardingColumn: pay_date
  17. shardingAlgorithmName: pay_date_algorithm
  18. keyGenerateStrategy:
  19. column: id
  20. keyGeneratorName: snowflake
  21. payment_wallet_detail:
  22. actualDataNodes: master_${0}.payment_wallet_detail_${2024}${(2..5).collect{it.toString().padLeft(2,'0')}}
  23. tableStrategy:
  24. standard:
  25. shardingColumn: pay_month
  26. shardingAlgorithmName: pay_month_algorithm
  27. keyGenerateStrategy:
  28. column: id
  29. keyGeneratorName: snowflake
  30. payment_wallet_account:
  31. actualDataNodes: master_${0}.payment_wallet_account_${2024}${(3..5).collect{it.toString().padLeft(2,'0')}}
  32. tableStrategy:
  33. standard:
  34. shardingColumn: actual_pay_month
  35. shardingAlgorithmName: pay_month_algorithm
  36. keyGenerateStrategy:
  37. column: id
  38. keyGeneratorName: snowflake
  39. payment_wallet_batch:
  40. actualDataNodes: master_${0}.payment_wallet_batch_${2024}${(2..5).collect{it.toString().padLeft(2,'0')}}
  41. tableStrategy:
  42. standard:
  43. shardingColumn: pay_month
  44. shardingAlgorithmName: pay_month_algorithm
  45. keyGenerateStrategy:
  46. column: id
  47. keyGeneratorName: snowflake
  48. payment_wallet_kv:
  49. actualDataNodes: master_${0}.payment_wallet_kv_${0..49}
  50. tableStrategy:
  51. complex:
  52. shardingColumns: reference_id
  53. shardingAlgorithmName: payment_wallet_kv_algorithm
  54. keyGenerateStrategy:
  55. column: id
  56. keyGeneratorName: snowflake
  57. payment_wallet_transaction:
  58. actualDataNodes: master_${0}.payment_wallet_transaction_${0..49}
  59. tableStrategy:
  60. complex:
  61. shardingColumns: pay_order_number
  62. shardingAlgorithmName: payment_wallet_transaction_algorithm
  63. keyGenerateStrategy:
  64. column: id
  65. keyGeneratorName: snowflake
  66. payment_wallet_ap_check_batch:
  67. actualDataNodes: master_${0}.payment_wallet_ap_check_batch_${2024}${(2..5).collect{it.toString().padLeft(2,'0')}}
  68. tableStrategy:
  69. standard:
  70. shardingColumn: actual_pay_month
  71. shardingAlgorithmName: pay_month_algorithm
  72. keyGenerateStrategy:
  73. column: id
  74. keyGeneratorName: snowflake
  75. payment_wallet_ap_check_detail:
  76. actualDataNodes: master_${0}.payment_wallet_ap_check_detail_${2024}${(2..5).collect{it.toString().padLeft(2,'0')}}
  77. tableStrategy:
  78. standard:
  79. shardingColumn: actual_pay_month
  80. shardingAlgorithmName: pay_month_algorithm
  81. keyGenerateStrategy:
  82. column: id
  83. keyGeneratorName: snowflake
  84. shardingAlgorithms:
  85. pay_date_algorithm:
  86. type: CLASS_BASE
  87. props:
  88. strategy: standard
  89. algorithmClassName: com.luoma.finance.sharingrule.PayDateStandardShardingAlgorithm
  90. pay_month_algorithm:
  91. type: CLASS_BASE_PAY_MONTH
  92. props:
  93. strategy: standard
  94. algorithmClassName: com.luoma.finance.sharingrule.PayMonthAlgorithm
  95. payment_wallet_kv_algorithm:
  96. type: CLASS_WALLET_KV
  97. props:
  98. strategy: complex
  99. algorithmClassName: com.luoma.finance.sharingrule.WalletKvShardingRule
  100. payment_wallet_transaction_algorithm:
  101. type: CLASS_WALLET_PAY_ORDER_NUMBER
  102. props:
  103. strategy: complex
  104. algorithmClassName: com.luoma.finance.sharingrule.WalletPayOrderNumberShardingRule
  105. keyGenerators:
  106. snowflake:
  107. type: SNOWFLAKE
  108. - !SINGLE
  109. tables:
  110. - "*.*"
  111. props:
  112. sql-show: true

问题分析

1.检查测试环境数据库连接,表是否创建

  • 检查测试环境下面的数据库,用户名,密码是否能正常使用

  • 检查报错查询的接口表是否创建

  1. dataSources:
  2. master_0:
  3. dataSourceClassName: com.zaxxer.hikari.HikariDataSource
  4. driverClassName: com.mysql.jdbc.Driver
  5. jdbcUrl: jdbc:mysql://a.a.a.a:3306/test1111?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false
  6. username: aaaaaaaa
  7. password: aaaaaaaa

2.检查 sharding 配置是否正确

  • 拷贝测试环境报错的配置文件到本地,查询报错接口,看看是否正常

3.检查测试环境对应的 Jar 包是否正常

  • 检查本地和测试环境编译生成的 Jar 包,看看对应版本和名称是否正常

4.本地启动 test 分支是否正常

  • 正常

5.开发环境使用 test 分支发布是否正常

  • 正常

6.本地使用 test 环境数据库是否正常

  • 正常

问题解决

1.重新整理上传了 application.yml 文件

2.检查了表结构,发现缺失了一些字段

2.重新整理了 shading.yml 文件

  1. dataSources:
  2. master_0:
  3. dataSourceClassName: com.zaxxer.hikari.HikariDataSource
  4. driverClassName: com.mysql.jdbc.Driver
  5. jdbcUrl: jdbc:mysql://1.1.1.1:3306/test1111?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false
  6. username: aaaaaaaa
  7. password: aaaaaaaa
  8. # 这里进行分库分表的表,需要在ShardingConfig中进行热启动,否则第一次查询会很慢
  9. rules:
  10. - !SHARDING
  11. tables:
  12. payment_wallet_iface:
  13. actualDataNodes: master_${0}.payment_wallet_iface_202${4..6}${(1..12).collect{it.toString().padLeft(2,'0')}}
  14. tableStrategy:
  15. standard:
  16. shardingColumn: pay_date
  17. shardingAlgorithmName: pay_date_algorithm
  18. keyGenerateStrategy:
  19. column: id
  20. keyGeneratorName: snowflake
  21. payment_wallet_detail:
  22. actualDataNodes: master_${0}.payment_wallet_detail_202${4..6}${(1..12).collect{it.toString().padLeft(2,'0')}}
  23. tableStrategy:
  24. standard:
  25. shardingColumn: pay_month
  26. shardingAlgorithmName: pay_month_algorithm
  27. keyGenerateStrategy:
  28. column: id
  29. keyGeneratorName: snowflake
  30. payment_wallet_account:
  31. actualDataNodes: master_${0}.payment_wallet_account_202${4..6}${(1..12).collect{it.toString().padLeft(2,'0')}}
  32. tableStrategy:
  33. standard:
  34. shardingColumn: actual_pay_month
  35. shardingAlgorithmName: pay_month_algorithm
  36. keyGenerateStrategy:
  37. column: id
  38. keyGeneratorName: snowflake
  39. payment_wallet_batch:
  40. actualDataNodes: master_${0}.payment_wallet_batch_202${4..6}${(1..12).collect{it.toString().padLeft(2,'0')}}
  41. tableStrategy:
  42. standard:
  43. shardingColumn: pay_month
  44. shardingAlgorithmName: pay_month_algorithm
  45. keyGenerateStrategy:
  46. column: id
  47. keyGeneratorName: snowflake
  48. payment_wallet_kv:
  49. actualDataNodes: master_${0}.payment_wallet_kv_${0..49}
  50. tableStrategy:
  51. complex:
  52. shardingColumns: reference_id
  53. shardingAlgorithmName: payment_wallet_kv_algorithm
  54. keyGenerateStrategy:
  55. column: id
  56. keyGeneratorName: snowflake
  57. payment_wallet_transaction:
  58. actualDataNodes: master_${0}.payment_wallet_transaction_${0..49}
  59. tableStrategy:
  60. complex:
  61. shardingColumns: pay_order_number
  62. shardingAlgorithmName: payment_wallet_transaction_algorithm
  63. keyGenerateStrategy:
  64. column: id
  65. keyGeneratorName: snowflake
  66. payment_wallet_ap_check_batch:
  67. actualDataNodes: master_${0}.payment_wallet_ap_check_batch_202${4..6}${(1..12).collect{it.toString().padLeft(2,'0')}}
  68. tableStrategy:
  69. standard:
  70. shardingColumn: actual_pay_month
  71. shardingAlgorithmName: pay_month_algorithm
  72. keyGenerateStrategy:
  73. column: id
  74. keyGeneratorName: snowflake
  75. payment_wallet_ap_check_detail:
  76. actualDataNodes: master_${0}.payment_wallet_ap_check_detail_202${4..6}${(1..12).collect{it.toString().padLeft(2,'0')}}
  77. tableStrategy:
  78. standard:
  79. shardingColumn: actual_pay_month
  80. shardingAlgorithmName: pay_month_algorithm
  81. keyGenerateStrategy:
  82. column: id
  83. keyGeneratorName: snowflake
  84. shardingAlgorithms:
  85. pay_date_algorithm:
  86. type: CLASS_BASE
  87. props:
  88. strategy: standard
  89. algorithmClassName: com.luoma.finance.sharingrule.PayDateStandardShardingAlgorithm
  90. pay_month_algorithm:
  91. type: CLASS_BASE_PAY_MONTH
  92. props:
  93. strategy: standard
  94. algorithmClassName: com.luoma.finance.sharingrule.PayMonthAlgorithm
  95. payment_wallet_kv_algorithm:
  96. type: CLASS_WALLET_KV
  97. props:
  98. strategy: complex
  99. algorithmClassName: com.luoma.finance.sharingrule.WalletKvShardingRule
  100. payment_wallet_transaction_algorithm:
  101. type: CLASS_WALLET_PAY_ORDER_NUMBER
  102. props:
  103. strategy: complex
  104. algorithmClassName: com.luoma.finance.sharingrule.WalletPayOrderNumberShardingRule
  105. keyGenerators:
  106. snowflake:
  107. type: SNOWFLAKE
  108. - !SINGLE
  109. tables:
  110. - "*.*"
  111. props:
  112. sql-show: true