数据库拆分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连接操作。

相关内容

热门资讯

加快完善中央银行制度!国常会讨... 5月21日,国务院总理李强主持召开国务院常务会议,研究推进全国统一大市场建设有关工作,审议通过《现代...
毕业人数历史新高,大城市却还在... 今年的毕业生人数要破纪录了,预计1270万人,和去年相比又增长了48万,再创历史新高。 按理来说,就...
28.5万亿美元——这是Spa... 全球太空探索领军者SpaceX最新发布的这份万众瞩目IPO招股说明书显示,其自行评估的SpaceX总...
乐聚智能冲击IPO,聚焦人形机... 2025年以来全球人形机器人行业进入爆发期,无论是企业数量,还是融资规模均实现跨越式增长。 据人形机...
年轻人把澡堂子玩成了社交顶配 ... 花上几百元,甚至上千元,到澡堂子待一天——这是时下最流行的休闲消费方式。当然,澡堂子们也把名字升级为...
原创 五... 无营生可做,无房产置办,也无心做任何投资,整日里就单纯陪着父亲左右度日。 这话是他说的,5月13日,...
合肥居家闲置黄金整理指南 轻松... 随着近年来黄金市场行情持续向好,合肥不少市民开始整理家中闲置的黄金首饰、金条等物品,希望通过合理处置...
廿载荣耀见证!52位券商领军者... 权威集结,见证行业标杆! 由证券时报主办的“2026中国证券业君鼎奖”活动即将进入专家评审阶段。本届...
小米YU7首战Model Y八... 快科技5月21日消息,今晚小米人车家全生态新品发布会上,雷军宣布正式推出小米YU7标准版,售价23....
小米跑车级SUV YU7 GT... 记者|李星 编辑|陈柯名 裴健如 杜恒峰 校对|程鹏 5月21日晚间,小米YU7 GT正式上市,售价...
霍尔木兹海峡封锁 日本原油进口... 据日本共同社5月21日报道,日本财务省21日公布4月贸易统计初值(通关口径)显示,从中东进口原油38...
鲍威尔任内最后一次会议纪要公布... 当地时间5月20日,美国联邦储备委员会公布的4月货币政策会议纪要表明,如果美国通胀持续高于目标水平,...
晚间开售,非标提价,茅台改革进... 出品|中访网 审核|李晓燕 5月18日,贵州茅台接连抛出两大市场动作,瞬间搅动白酒行业神经。继5月1...
海关律师、走私辩护律师邵丹:罗... 近日,罗湖海关查获旅客走私红酒3支。 某日,罗湖海关关员在对进境旅客进行监管时,发现一名男性旅客进...
原创 三... 目前全球所有的电子产品中,涨的最猛的,就是内存。 最近一年以来,平均涨了四五倍,内存厂商们是大赚特赚...
长鑫科技科创板IPO将于5月2... 观点网讯:5月20日,据上交所网站披露,上交所上市审核委员会定于5月27日召开2026年第27次上市...
345.68亿!上海S基金交易... 来源:看看新闻KNEWS 日前,由上海股权托管交易中心、上海科创中心股权投资基金管理有限公司联合主办...
腾讯云·云上好CP携手六大消费... 当告白季的温柔氛围, 撞上科技赋能的好物狂欢, 腾讯云「云上好 CP」带着六大消费电子企业CP惊喜登...
擎天租与京东集团达成战略合作,... 来源:猎云网 5月21日,擎天租宣布与京东集团达成全面战略合作,双方将围绕产品解决方案共建、渠道供应...
金鹰基金固收老将林暐一次性卸任... 5月19日,金鹰基金管理有限公司(下称“金鹰基金”)发布多份基金经理变更公告,旗下基金经理林暐因个人...