数据库拆分2--使用sharding-jdbc实现垂直拆分
admin
2024-04-21 07:57:31
0

使用sharding-jdbc来实现数据库的垂直拆分

下载 :: ShardingSphere

Sharding-JDBC 实战(史上最全)_40岁资深老架构师尼恩的博客-CSDN博客_sharding-jdbc

Sharding-JDBC(二)SpringBoot整合Sharding-JDBC实现分库分表_一恍过去的博客-CSDN博客

实现步骤很简单

1.引入依赖

org.apache.shardingspheresharding-jdbc-spring-boot-starter4.0.0-RC1

2.配置文件

#shardingjdbc
spring.shardingsphere.datasource.names=wim-user,wim-orderspring.shardingsphere.datasource.wim-user.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.wim-user.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.wim-user.url=jdbc:mysql://127.0.0.1:3306/wim-user?serverTimezone=UTC&useSSL=false
spring.shardingsphere.datasource.wim-user.username=root
spring.shardingsphere.datasource.wim-user.password=123456spring.shardingsphere.datasource.wim-order.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.wim-order.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.wim-order.url=jdbc:mysql://127.0.0.1:3306/wim-order?serverTimezone=UTC&useSSL=false
spring.shardingsphere.datasource.wim-order.username=root
spring.shardingsphere.datasource.wim-order.password=123456spring.shardingsphere.sharding.tables.order_t.actual-data-nodes=wim-order.order_t
spring.shardingsphere.sharding.default-data-source-name=wim-user
spring.shardingsphere.props.sql.show=true
spring.main.allow-bean-definition-overriding=true

简单写两个方法来测试一下

@Transactional
public void saveUserAndOrder() {User user = new User();user.setName("user" + System.currentTimeMillis());user.setAge(0);userMapper.insert(user);log.info("TransactionService saveUserAndOrderTrans user {}", user);Order order = new Order();order.setName("order" + System.currentTimeMillis());order.setDate(new Date());orderMapper.insert(order);log.info("TransactionService saveUserAndOrderTrans order {}", order);
}

正常写入,日志如下:

2022-12-11 17:35:20.081 DEBUG 16248 --- [o-8080-Acceptor] o.apache.tomcat.util.threads.LimitLatch  : Counting up[http-nio-8080-Acceptor] latch=1
2022-12-11 17:35:20.081 DEBUG 16248 --- [o-8080-Acceptor] o.apache.tomcat.util.threads.LimitLatch  : Counting up[http-nio-8080-Acceptor] latch=2
2022-12-11 17:35:20.082 DEBUG 16248 --- [nio-8080-exec-5] o.a.coyote.http11.Http11InputBuffer      : Before fill(): [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position() [0]
2022-12-11 17:35:20.083 DEBUG 16248 --- [nio-8080-exec-5] o.a.tomcat.util.net.SocketWrapperBase    : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@1ffd1618:org.apache.tomcat.util.net.NioChannel@29090279:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:59934]], Read from buffer: [0]
2022-12-11 17:35:20.083 DEBUG 16248 --- [nio-8080-exec-5] org.apache.tomcat.util.net.NioEndpoint   : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@1ffd1618:org.apache.tomcat.util.net.NioChannel@29090279:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:59934]], Read direct from socket: [687]
2022-12-11 17:35:20.083 DEBUG 16248 --- [nio-8080-exec-5] o.a.coyote.http11.Http11InputBuffer      : Received [GET /mutildb/trans/saveUserAndOrder HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
sec-ch-ua: "Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9]
2022-12-11 17:35:20.083 DEBUG 16248 --- [nio-8080-exec-5] o.a.c.authenticator.AuthenticatorBase    : Security checking request GET /mutildb/trans/saveUserAndOrder
2022-12-11 17:35:20.083 DEBUG 16248 --- [nio-8080-exec-5] org.apache.catalina.realm.RealmBase      :   No applicable constraints defined
2022-12-11 17:35:20.083 DEBUG 16248 --- [nio-8080-exec-5] o.a.c.authenticator.AuthenticatorBase    : Not subject to any constraint
2022-12-11 17:35:20.083 DEBUG 16248 --- [nio-8080-exec-5] org.apache.tomcat.util.http.Parameters   : Set encoding to UTF-8
2022-12-11 17:35:20.084 DEBUG 16248 --- [nio-8080-exec-5] o.s.web.servlet.DispatcherServlet        : GET "/mutildb/trans/saveUserAndOrder", parameters={}
2022-12-11 17:35:20.084 DEBUG 16248 --- [nio-8080-exec-5] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.chen.rest.TransRest#saveUserAndOrder()
2022-12-11 17:35:20.084 DEBUG 16248 --- [nio-8080-exec-5] o.s.j.d.DataSourceTransactionManager     : Creating new transaction with name [com.chen.service.TransactionService.saveUserAndOrder]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
2022-12-11 17:35:20.084 DEBUG 16248 --- [nio-8080-exec-5] o.s.j.d.DataSourceTransactionManager     : Acquired Connection [org.apache.shardingsphere.shardingjdbc.jdbc.core.connection.ShardingConnection@113afb97] for JDBC transaction
2022-12-11 17:35:20.084 DEBUG 16248 --- [nio-8080-exec-5] o.s.j.d.DataSourceTransactionManager     : Switching JDBC Connection [org.apache.shardingsphere.shardingjdbc.jdbc.core.connection.ShardingConnection@113afb97] to manual commit
Creating a new SqlSession
Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15057d68]
JDBC Connection [org.apache.shardingsphere.shardingjdbc.jdbc.core.connection.ShardingConnection@113afb97] will be managed by Spring
==>  Preparing: INSERT INTO user_t ( id, name, age ) VALUES ( ?, ?, ? )
==> Parameters: 1601873255239520257(Long), user1670751320084(String), 0(Integer)
2022-12-11 17:35:20.085  INFO 16248 --- [nio-8080-exec-5] ShardingSphere-SQL                       : Rule Type: sharding
2022-12-11 17:35:20.085  INFO 16248 --- [nio-8080-exec-5] ShardingSphere-SQL                       : Logic SQL: INSERT INTO user_t  ( id,
name,
age )  VALUES  ( ?,
?,
? )
2022-12-11 17:35:20.085  INFO 16248 --- [nio-8080-exec-5] ShardingSphere-SQL                       : SQLStatement: InsertStatement(super=DMLStatement(super=AbstractSQLStatement(type=DML, tables=Tables(tables=[Table(name=user_t, alias=Optional.absent())]), routeConditions=Conditions(orCondition=OrCondition(andConditions=[AndCondition(conditions=[])])), encryptConditions=Conditions(orCondition=OrCondition(andConditions=[])), sqlTokens=[TableToken(tableName=user_t, quoteCharacter=NONE, schemaNameLength=0), SQLToken(startIndex=20)], parametersIndex=3, logicSQL=INSERT INTO user_t  ( id,
name,
age )  VALUES  ( ?,
?,
? )), deleteStatement=false, updateTableAlias={}, updateColumnValues={}, whereStartIndex=0, whereStopIndex=0, whereParameterStartIndex=0, whereParameterEndIndex=0), columnNames=[id, name, age], values=[InsertValue(columnValues=[org.apache.shardingsphere.core.parse.old.parser.expression.SQLPlaceholderExpression@3b0c4e5c, org.apache.shardingsphere.core.parse.old.parser.expression.SQLPlaceholderExpression@5170fffe, org.apache.shardingsphere.core.parse.old.parser.expression.SQLPlaceholderExpression@7ce7e032])])
2022-12-11 17:35:20.085  INFO 16248 --- [nio-8080-exec-5] ShardingSphere-SQL                       : Actual SQL: wim-user ::: INSERT INTO user_t   (id, name, age) VALUES (?, ?, ?) ::: [1601873255239520257, user1670751320084, 0]
2022-12-11 17:35:20.091 DEBUG 16248 --- [nio-8080-exec-5] o.a.c.loader.WebappClassLoaderBase       :     findClass(com.mysql.jdbc.MySQLConnection)
2022-12-11 17:35:20.092 DEBUG 16248 --- [nio-8080-exec-5] o.a.c.loader.WebappClassLoaderBase       :     --> Returning ClassNotFoundException
2022-12-11 17:35:20.095  WARN 16248 --- [nio-8080-exec-5] c.a.druid.pool.DruidAbstractDataSource   : discard long time none received connection. , jdbcUrl : jdbc:mysql://127.0.0.1:3306/wim-user?serverTimezone=UTC&useSSL=false, version : 1.2.8, lastPacketReceivedIdleMillis : 227765
2022-12-11 17:35:20.095 DEBUG 16248 --- [nio-8080-exec-5] com.alibaba.druid.pool.DruidDataSource   : skip not validate connection.
<==    Updates: 1
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15057d68]
2022-12-11 17:35:20.101  INFO 16248 --- [nio-8080-exec-5] com.chen.service.TransactionService      : TransactionService saveUserAndOrderTrans user User(id=1601873255239520257, name=user1670751320084, age=0)
Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15057d68] from current transaction
==>  Preparing: INSERT INTO order_t ( id, name, date ) VALUES ( ?, ?, ? )
==> Parameters: 1601873255302434818(Long), order1670751320101(String), 2022-12-11 17:35:20.101(Timestamp)
2022-12-11 17:35:20.102  INFO 16248 --- [nio-8080-exec-5] ShardingSphere-SQL                       : Rule Type: sharding
2022-12-11 17:35:20.102  INFO 16248 --- [nio-8080-exec-5] ShardingSphere-SQL                       : Logic SQL: INSERT INTO order_t  ( id,
name,
date )  VALUES  ( ?,
?,
? )
2022-12-11 17:35:20.102  INFO 16248 --- [nio-8080-exec-5] ShardingSphere-SQL                       : SQLStatement: InsertStatement(super=DMLStatement(super=AbstractSQLStatement(type=DML, tables=Tables(tables=[Table(name=order_t, alias=Optional.absent())]), routeConditions=Conditions(orCondition=OrCondition(andConditions=[AndCondition(conditions=[])])), encryptConditions=Conditions(orCondition=OrCondition(andConditions=[])), sqlTokens=[TableToken(tableName=order_t, quoteCharacter=NONE, schemaNameLength=0), SQLToken(startIndex=21)], parametersIndex=3, logicSQL=INSERT INTO order_t  ( id,
name,
date )  VALUES  ( ?,
?,
? )), deleteStatement=false, updateTableAlias={}, updateColumnValues={}, whereStartIndex=0, whereStopIndex=0, whereParameterStartIndex=0, whereParameterEndIndex=0), columnNames=[id, name, date], values=[InsertValue(columnValues=[org.apache.shardingsphere.core.parse.old.parser.expression.SQLPlaceholderExpression@3c187569, org.apache.shardingsphere.core.parse.old.parser.expression.SQLPlaceholderExpression@67bcb8b8, org.apache.shardingsphere.core.parse.old.parser.expression.SQLPlaceholderExpression@6b9ef97a])])
2022-12-11 17:35:20.102  INFO 16248 --- [nio-8080-exec-5] ShardingSphere-SQL                       : Actual SQL: wim-order ::: INSERT INTO order_t   (id, name, date) VALUES (?, ?, ?) ::: [1601873255302434818, order1670751320101, 2022-12-11 17:35:20.101]
2022-12-11 17:35:20.102  WARN 16248 --- [nio-8080-exec-5] c.a.druid.pool.DruidAbstractDataSource   : discard long time none received connection. , jdbcUrl : jdbc:mysql://127.0.0.1:3306/wim-order?serverTimezone=UTC&useSSL=false, version : 1.2.8, lastPacketReceivedIdleMillis : 227780
2022-12-11 17:35:20.102 DEBUG 16248 --- [nio-8080-exec-5] com.alibaba.druid.pool.DruidDataSource   : skip not validate connection.
<==    Updates: 1
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15057d68]
2022-12-11 17:35:20.106  INFO 16248 --- [nio-8080-exec-5] com.chen.service.TransactionService      : TransactionService saveUserAndOrderTrans order Order(id=1601873255302434818, name=order1670751320101, date=Sun Dec 11 17:35:20 CST 2022)
Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15057d68]
Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15057d68]
Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15057d68]
2022-12-11 17:35:20.106 DEBUG 16248 --- [nio-8080-exec-5] o.s.j.d.DataSourceTransactionManager     : Initiating transaction commit
2022-12-11 17:35:20.106 DEBUG 16248 --- [nio-8080-exec-5] o.s.j.d.DataSourceTransactionManager     : Committing JDBC transaction on Connection [org.apache.shardingsphere.shardingjdbc.jdbc.core.connection.ShardingConnection@113afb97]
2022-12-11 17:35:20.112 DEBUG 16248 --- [nio-8080-exec-5] o.s.j.d.DataSourceTransactionManager     : Releasing JDBC Connection [org.apache.shardingsphere.shardingjdbc.jdbc.core.connection.ShardingConnection@113afb97] after transaction
2022-12-11 17:35:20.113 DEBUG 16248 --- [nio-8080-exec-5] m.m.a.RequestResponseBodyMethodProcessor : Using 'text/html', given [text/html, application/xhtml+xml, image/avif, image/webp, image/apng, application/xml;q=0.9, application/signed-exchange;v=b3;q=0.9, */*;q=0.8] and supported [text/plain, */*, text/plain, */*, application/json, application/*+json, application/json, application/*+json]
2022-12-11 17:35:20.113 DEBUG 16248 --- [nio-8080-exec-5] m.m.a.RequestResponseBodyMethodProcessor : Writing ["ok"]
2022-12-11 17:35:20.114 DEBUG 16248 --- [nio-8080-exec-5] o.s.web.servlet.DispatcherServlet        : Completed 200 OK
2022-12-11 17:35:20.114 DEBUG 16248 --- [nio-8080-exec-5] o.a.coyote.http11.Http11InputBuffer      : Before fill(): [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position() [0]
2022-12-11 17:35:20.114 DEBUG 16248 --- [nio-8080-exec-5] o.a.tomcat.util.net.SocketWrapperBase    : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@1ffd1618:org.apache.tomcat.util.net.NioChannel@29090279:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:59934]], Read from buffer: [0]
2022-12-11 17:35:20.114 DEBUG 16248 --- [nio-8080-exec-5] org.apache.tomcat.util.net.NioEndpoint   : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@1ffd1618:org.apache.tomcat.util.net.NioChannel@29090279:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:59934]], Read direct from socket: [0]
2022-12-11 17:35:20.114 DEBUG 16248 --- [nio-8080-exec-5] o.a.coyote.http11.Http11InputBuffer      : Received []
2022-12-11 17:35:20.114 DEBUG 16248 --- [nio-8080-exec-5] o.apache.coyote.http11.Http11Processor   : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@1ffd1618:org.apache.tomcat.util.net.NioChannel@29090279:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:59934]], Status in: [OPEN_READ], State out: [OPEN]
2022-12-11 17:35:20.114 DEBUG 16248 --- [nio-8080-exec-5] org.apache.tomcat.util.net.NioEndpoint   : Registered read interest for [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@1ffd1618:org.apache.tomcat.util.net.NioChannel@29090279:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:59934]]

可以查看一下日志  看一下数据源是如何切换的。

@Transactional
public void saveUserAndOrderTrans() {User user = new User();user.setName("user" + System.currentTimeMillis());user.setAge(0);userMapper.insert(user);log.info("TransactionService saveUserAndOrderTrans user {}", user);Order order = new Order();order.setName("order" + System.currentTimeMillis());order.setDate(new Date());orderMapper.insert(order);log.info("TransactionService saveUserAndOrderTrans order {}", order);// 制造异常 事务回滚int x = 1 / 0;log.info("x");
}

测试一下异常情况下  多数据源事务能否回滚

2022-12-11 17:37:03.317 DEBUG 16248 --- [o-8080-Acceptor] o.apache.tomcat.util.threads.LimitLatch  : Counting up[http-nio-8080-Acceptor] latch=2
2022-12-11 17:37:03.318 DEBUG 16248 --- [nio-8080-exec-9] o.a.coyote.http11.Http11InputBuffer      : Before fill(): [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position() [0]
2022-12-11 17:37:03.320 DEBUG 16248 --- [nio-8080-exec-9] o.a.tomcat.util.net.SocketWrapperBase    : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@731b4256:org.apache.tomcat.util.net.NioChannel@29090279:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:60052]], Read from buffer: [0]
2022-12-11 17:37:03.320 DEBUG 16248 --- [nio-8080-exec-9] org.apache.tomcat.util.net.NioEndpoint   : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@731b4256:org.apache.tomcat.util.net.NioChannel@29090279:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:60052]], Read direct from socket: [718]
2022-12-11 17:37:03.320 DEBUG 16248 --- [nio-8080-exec-9] o.a.coyote.http11.Http11InputBuffer      : Received [GET /mutildb/trans/saveUserAndOrderTrans HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: "Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9]
2022-12-11 17:37:03.320 DEBUG 16248 --- [nio-8080-exec-9] o.a.c.authenticator.AuthenticatorBase    : Security checking request GET /mutildb/trans/saveUserAndOrderTrans
2022-12-11 17:37:03.320 DEBUG 16248 --- [nio-8080-exec-9] org.apache.catalina.realm.RealmBase      :   No applicable constraints defined
2022-12-11 17:37:03.320 DEBUG 16248 --- [nio-8080-exec-9] o.a.c.authenticator.AuthenticatorBase    : Not subject to any constraint
2022-12-11 17:37:03.320 DEBUG 16248 --- [nio-8080-exec-9] org.apache.tomcat.util.http.Parameters   : Set encoding to UTF-8
2022-12-11 17:37:03.320 DEBUG 16248 --- [nio-8080-exec-9] o.s.web.servlet.DispatcherServlet        : GET "/mutildb/trans/saveUserAndOrderTrans", parameters={}
2022-12-11 17:37:03.320 DEBUG 16248 --- [nio-8080-exec-9] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.chen.rest.TransRest#saveUserAndOrderTrans()
2022-12-11 17:37:03.321 DEBUG 16248 --- [nio-8080-exec-9] o.s.j.d.DataSourceTransactionManager     : Creating new transaction with name [com.chen.service.TransactionService.saveUserAndOrderTrans]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
2022-12-11 17:37:03.321 DEBUG 16248 --- [nio-8080-exec-9] o.s.j.d.DataSourceTransactionManager     : Acquired Connection [org.apache.shardingsphere.shardingjdbc.jdbc.core.connection.ShardingConnection@7ddcb245] for JDBC transaction
2022-12-11 17:37:03.321 DEBUG 16248 --- [nio-8080-exec-9] o.s.j.d.DataSourceTransactionManager     : Switching JDBC Connection [org.apache.shardingsphere.shardingjdbc.jdbc.core.connection.ShardingConnection@7ddcb245] to manual commit
Creating a new SqlSession
Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@79e32926]
JDBC Connection [org.apache.shardingsphere.shardingjdbc.jdbc.core.connection.ShardingConnection@7ddcb245] will be managed by Spring
==>  Preparing: INSERT INTO user_t ( id, name, age ) VALUES ( ?, ?, ? )
==> Parameters: 1601873688238493698(Long), user1670751423321(String), 0(Integer)
2022-12-11 17:37:03.321  INFO 16248 --- [nio-8080-exec-9] ShardingSphere-SQL                       : Rule Type: sharding
2022-12-11 17:37:03.321  INFO 16248 --- [nio-8080-exec-9] ShardingSphere-SQL                       : Logic SQL: INSERT INTO user_t  ( id,
name,
age )  VALUES  ( ?,
?,
? )
2022-12-11 17:37:03.322  INFO 16248 --- [nio-8080-exec-9] ShardingSphere-SQL                       : SQLStatement: InsertStatement(super=DMLStatement(super=AbstractSQLStatement(type=DML, tables=Tables(tables=[Table(name=user_t, alias=Optional.absent())]), routeConditions=Conditions(orCondition=OrCondition(andConditions=[AndCondition(conditions=[])])), encryptConditions=Conditions(orCondition=OrCondition(andConditions=[])), sqlTokens=[TableToken(tableName=user_t, quoteCharacter=NONE, schemaNameLength=0), SQLToken(startIndex=20)], parametersIndex=3, logicSQL=INSERT INTO user_t  ( id,
name,
age )  VALUES  ( ?,
?,
? )), deleteStatement=false, updateTableAlias={}, updateColumnValues={}, whereStartIndex=0, whereStopIndex=0, whereParameterStartIndex=0, whereParameterEndIndex=0), columnNames=[id, name, age], values=[InsertValue(columnValues=[org.apache.shardingsphere.core.parse.old.parser.expression.SQLPlaceholderExpression@3b0c4e5c, org.apache.shardingsphere.core.parse.old.parser.expression.SQLPlaceholderExpression@5170fffe, org.apache.shardingsphere.core.parse.old.parser.expression.SQLPlaceholderExpression@7ce7e032])])
2022-12-11 17:37:03.322  INFO 16248 --- [nio-8080-exec-9] ShardingSphere-SQL                       : Actual SQL: wim-user ::: INSERT INTO user_t   (id, name, age) VALUES (?, ?, ?) ::: [1601873688238493698, user1670751423321, 0]
<==    Updates: 1
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@79e32926]
2022-12-11 17:37:03.323  INFO 16248 --- [nio-8080-exec-9] com.chen.service.TransactionService      : TransactionService saveUserAndOrderTrans user User(id=1601873688238493698, name=user1670751423321, age=0)
Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@79e32926] from current transaction
==>  Preparing: INSERT INTO order_t ( id, name, date ) VALUES ( ?, ?, ? )
==> Parameters: 1601873688305602562(Long), order1670751423323(String), 2022-12-11 17:37:03.323(Timestamp)
2022-12-11 17:37:03.323  INFO 16248 --- [nio-8080-exec-9] ShardingSphere-SQL                       : Rule Type: sharding
2022-12-11 17:37:03.323  INFO 16248 --- [nio-8080-exec-9] ShardingSphere-SQL                       : Logic SQL: INSERT INTO order_t  ( id,
name,
date )  VALUES  ( ?,
?,
? )
2022-12-11 17:37:03.323  INFO 16248 --- [nio-8080-exec-9] ShardingSphere-SQL                       : SQLStatement: InsertStatement(super=DMLStatement(super=AbstractSQLStatement(type=DML, tables=Tables(tables=[Table(name=order_t, alias=Optional.absent())]), routeConditions=Conditions(orCondition=OrCondition(andConditions=[AndCondition(conditions=[])])), encryptConditions=Conditions(orCondition=OrCondition(andConditions=[])), sqlTokens=[TableToken(tableName=order_t, quoteCharacter=NONE, schemaNameLength=0), SQLToken(startIndex=21)], parametersIndex=3, logicSQL=INSERT INTO order_t  ( id,
name,
date )  VALUES  ( ?,
?,
? )), deleteStatement=false, updateTableAlias={}, updateColumnValues={}, whereStartIndex=0, whereStopIndex=0, whereParameterStartIndex=0, whereParameterEndIndex=0), columnNames=[id, name, date], values=[InsertValue(columnValues=[org.apache.shardingsphere.core.parse.old.parser.expression.SQLPlaceholderExpression@3c187569, org.apache.shardingsphere.core.parse.old.parser.expression.SQLPlaceholderExpression@67bcb8b8, org.apache.shardingsphere.core.parse.old.parser.expression.SQLPlaceholderExpression@6b9ef97a])])
2022-12-11 17:37:03.323  INFO 16248 --- [nio-8080-exec-9] ShardingSphere-SQL                       : Actual SQL: wim-order ::: INSERT INTO order_t   (id, name, date) VALUES (?, ?, ?) ::: [1601873688305602562, order1670751423323, 2022-12-11 17:37:03.323]
<==    Updates: 1
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@79e32926]
2022-12-11 17:37:03.324  INFO 16248 --- [nio-8080-exec-9] com.chen.service.TransactionService      : TransactionService saveUserAndOrderTrans order Order(id=1601873688305602562, name=order1670751423323, date=Sun Dec 11 17:37:03 CST 2022)
Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@79e32926]
Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@79e32926]
2022-12-11 17:37:03.324 DEBUG 16248 --- [nio-8080-exec-9] o.s.j.d.DataSourceTransactionManager     : Initiating transaction rollback
2022-12-11 17:37:03.324 DEBUG 16248 --- [nio-8080-exec-9] o.s.j.d.DataSourceTransactionManager     : Rolling back JDBC transaction on Connection [org.apache.shardingsphere.shardingjdbc.jdbc.core.connection.ShardingConnection@7ddcb245]
2022-12-11 17:37:03.325 DEBUG 16248 --- [nio-8080-exec-9] o.s.j.d.DataSourceTransactionManager     : Releasing JDBC Connection [org.apache.shardingsphere.shardingjdbc.jdbc.core.connection.ShardingConnection@7ddcb245] after transaction
2022-12-11 17:37:03.326 DEBUG 16248 --- [nio-8080-exec-9] o.s.web.servlet.DispatcherServlet        : Failed to complete request: java.lang.ArithmeticException: / by zero
2022-12-11 17:37:03.326 ERROR 16248 --- [nio-8080-exec-9] o.a.c.c.C.[.[.[.[dispatcherServlet]      : Servlet.service() for servlet [dispatcherServlet] in context with path [/mutildb] threw exception [Request processing failed; nested exception is java.lang.ArithmeticException: / by zero] with root causejava.lang.ArithmeticException: / by zeroat com.chen.service.TransactionService.saveUserAndOrderTrans(TransactionService.java:39) ~[classes/:na]at com.chen.service.TransactionService$$FastClassBySpringCGLIB$$4d99c3a3.invoke() ~[classes/:na]at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771) ~[spring-aop-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:367) ~[spring-tx-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118) ~[spring-tx-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) ~[spring-aop-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691) ~[spring-aop-5.2.12.RELEASE.jar:5.2.12.RELEASE]at com.chen.service.TransactionService$$EnhancerBySpringCGLIB$$f6cc31e0.saveUserAndOrderTrans() ~[classes/:na]at com.chen.rest.TransRest.saveUserAndOrderTrans(TransRest.java:21) ~[classes/:na]at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_272]at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_272]at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_272]at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_272]at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) ~[spring-webmvc-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878) ~[spring-webmvc-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792) ~[spring-webmvc-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.2.12.RELEASE.jar:5.2.12.RELEASE]at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.41.jar:4.0.FR]at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.12.RELEASE.jar:5.2.12.RELEASE]at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.41.jar:4.0.FR]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.41.jar:9.0.41]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41]at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41]at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41]at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) [tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) [tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888) [tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597) [tomcat-embed-core-9.0.41.jar:9.0.41]at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.41.jar:9.0.41]at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_272]at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_272]at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.41.jar:9.0.41]at java.lang.Thread.run(Thread.java:748) [na:1.8.0_272]2022-12-11 17:37:03.326 DEBUG 16248 --- [nio-8080-exec-9] o.a.c.c.C.[Tomcat].[localhost]           : Processing ErrorPage[errorCode=0, location=/error]
2022-12-11 17:37:03.327 DEBUG 16248 --- [nio-8080-exec-9] o.s.web.servlet.DispatcherServlet        : "ERROR" dispatch for GET "/mutildb/error", parameters={}
2022-12-11 17:37:03.327 DEBUG 16248 --- [nio-8080-exec-9] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#errorHtml(HttpServletRequest, HttpServletResponse)
2022-12-11 17:37:03.328 DEBUG 16248 --- [nio-8080-exec-9] o.s.w.s.v.ContentNegotiatingViewResolver : Selected 'text/html' given [text/html, text/html;q=0.8]
2022-12-11 17:37:03.328 DEBUG 16248 --- [nio-8080-exec-9] o.s.web.servlet.DispatcherServlet        : Exiting from "ERROR" dispatch, status 500
2022-12-11 17:37:03.328 DEBUG 16248 --- [nio-8080-exec-9] o.a.c.c.C.[.[.[.[dispatcherServlet]      :  Disabling the response for further output
2022-12-11 17:37:03.329 DEBUG 16248 --- [nio-8080-exec-9] o.apache.coyote.http11.Http11Processor   : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@731b4256:org.apache.tomcat.util.net.NioChannel@29090279:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:60052]], Status in: [OPEN_READ], State out: [CLOSED]
2022-12-11 17:37:03.329 DEBUG 16248 --- [nio-8080-exec-9] o.apache.tomcat.util.threads.LimitLatch  : Counting down[http-nio-8080-exec-9] latch=2
2022-12-11 17:37:03.329 DEBUG 16248 --- [nio-8080-exec-9] org.apache.tomcat.util.net.NioEndpoint   : Calling [org.apache.tomcat.util.net.NioEndpoint@32bebc54].closeSocket([org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@731b4256:org.apache.tomcat.util.net.NioChannel@29090279:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote=/127.0.0.1:60052]])

由日志可知,事务是OK的 事务回滚了。

sharding-jdbc属于jdbc驱动层级的实现方式,对于原有代码是兼容的,原有代码基本不需要改动。

后面有时间研究一下 多数据源事务是如何实现的 以及sql连接操作。

相关内容

热门资讯

千亿分红如期派发,银行股为何依... 如何穿越周期、构建新的护城河,不仅是对银行战略定力的考验,更是其估值能否真正筑底回升的决定性变量 文...
如何选择广州OPC一人轻资产跨... 当下,出海创业成为不少个体经营者和中小企业拓展市场的选择,其中OPC一人轻资产模式因投入低、灵活性高...
原创 若... 时间来到2026年7月,翻看这半年的账本会发现一件挺矛盾的事,家里餐桌上的菜价、货架上的日用品价格几...
欧美企业掀起向中国AI基础设施... 2026年6月,多家海外企业转向中国AI:加密货币交易平台Coinbase将其定为工程师默认工具,美...
天风·轻纺 | 九部门发文鼓励... 我们认为本次文件或更多从供给侧推动零售业升级,鼓励新型优质零售;从网点布局、产品品质、定价体系,消费...
华夏基金(香港)行政总裁甘添专... 中国基金报记者 叶诗婕 在互联互通机制持续深化、全球资产配置需求蓬勃涌现的当下,香港ETF市场正经历...
华尔街的新策略:剔除马斯克 华尔街正将“剔除马斯克”变为一种交易策略。 随着SpaceX以创纪录速度“闪电入指”,引发被动资金大...
500万人的牵挂,有了暖心答案 大众卫生报·新湖南客户端7月9日讯(通讯员 肖心玥 禹晓东)50多天前,一段重型货车碾压伤患者的急诊...
杨山海:黄金,白银下周有放量上... 杨山海:黄金,白银下周有放量上涨的可能! 趁着周末有空,我给大家好好复盘下上周的黄金、白银行情,...
原创 马... #马斯克再出狂言 #:# 马斯克要让 SpaceX 价值超整个地球 #,马斯克又一次凭借魔幻言论刷屏...
AI存储巨头遭遇冰火两重天:S... 存储巨头SK海力士带着265亿美元的庞大募资计划,强势叩开美国资本市场的大门。7月10日,SK海力士...
为什么基金合同要明确投资限制? 基金合同明确投资限制具有多方面的重要意义,对投资者、基金管理人以及整个金融市场都有着不可忽视的作用。...
基金运作如何影响申赎安排更稳妥... 基金的运作机制与申赎安排之间存在着紧密的联系,合理的申赎安排能够确保基金的平稳运作,同时保障投资者的...
破解市场算法的人:粒子物理学博... 萨米尔·瓦尔马博士(Dr. Samir Varma)是一位非常特殊的交易者。他拥有粒子物理学博士背景...
曙光8000正式落成 中国AI... 上证报中国证券网讯(记者 王乔琪)7月9日至7月11日,光合组织2026智能计算应用大会在郑州举行,...
CEO亲自来华,5年在华酒店近... 台州仙居铂尔曼酒店。源自:企业官网 本报(chinatimes.net.cn)记者张蓓 黄指南 深圳...
MiniMax再跌10%!CE... 瑞财经 严明会7月10日,MiniMax(0100.HK)完成新一轮160亿港币融资。当日早盘,Mi...
原创 中... 新能源越跑越快,镍一下子成了绕不过去的原材料“风口”,可就在全球汽车行业拼新能源的时候, 印尼悄悄收...
利率变化对黄金行情影响如何分析... 利率作为经济领域的关键变量,其变化对金融市场的各个方面都有着深远影响,其中黄金市场也不例外。分析利率...