From 1f1ca444ea18e9bb365677869016066d955c3362 Mon Sep 17 00:00:00 2001 From: gaoxianyang Date: 2019年10月29日 10:56:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B2=A1=E6=9C=89=E9=85=8D=E7=BD=AE=E5=88=86?= =?UTF-8?q?=E5=BA=93=E7=AD=96=E7=95=A5=20=E7=9A=84=E8=A1=A8=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E9=BB=98=E8=AE=A4=E6=95=B0=E6=8D=AE=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sharding-jdbc-db-ms-tbl/pom.xml | 10 +++ .../service/UserService.java | 14 +++ .../service/impl/UserServiceImpl.java | 85 ++++++++++++++++++- .../web/UserController.java | 34 ++++++++ .../resources/META-INF/mybatis-config.xml | 6 ++ .../src/main/resources/application.properties | 27 +++--- 6 files changed, 161 insertions(+), 15 deletions(-) diff --git a/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/pom.xml b/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/pom.xml index 3159d3a..4b25826 100755 --- a/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/pom.xml +++ b/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/pom.xml @@ -47,6 +47,16 @@ sharding-jdbc-spring-boot-starter 3.1.0.M1 + + io.shardingsphere + sharding-transaction-spring + 3.1.0.M1 + + + + org.springframework.boot + spring-boot-starter-aop + diff --git a/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/java/com/forezp/shardingjdbcdbmstbl/service/UserService.java b/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/java/com/forezp/shardingjdbcdbmstbl/service/UserService.java index f36cc6b..563f10a 100755 --- a/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/java/com/forezp/shardingjdbcdbmstbl/service/UserService.java +++ b/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/java/com/forezp/shardingjdbcdbmstbl/service/UserService.java @@ -3,6 +3,9 @@ import com.forezp.shardingjdbcdbmstbl.entity.User; +import com.forezp.shardingjdbcdbmstbl.entity.UserInfo; + + import java.util.List; @@ -10,7 +13,18 @@ public interface UserService { Integer addUser(User user); + + Integer addUserInfo(UserInfo userInfo); + List list(); + List listInfo(); + void deleteAll(); + + + Integer addUserBash(); + + + Integer addUserInfoandUser(); } diff --git a/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/java/com/forezp/shardingjdbcdbmstbl/service/impl/UserServiceImpl.java b/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/java/com/forezp/shardingjdbcdbmstbl/service/impl/UserServiceImpl.java index f70488a..736bb7f 100755 --- a/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/java/com/forezp/shardingjdbcdbmstbl/service/impl/UserServiceImpl.java +++ b/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/java/com/forezp/shardingjdbcdbmstbl/service/impl/UserServiceImpl.java @@ -2,10 +2,17 @@ import com.forezp.shardingjdbcdbmstbl.entity.User; +import com.forezp.shardingjdbcdbmstbl.entity.UserInfo; +import com.forezp.shardingjdbcdbmstbl.repository.UserInfoRepository; import com.forezp.shardingjdbcdbmstbl.repository.UserRepository; import com.forezp.shardingjdbcdbmstbl.service.UserService; +import io.shardingsphere.core.constant.transaction.TransactionType; +import io.shardingsphere.transaction.annotation.ShardingTransactionType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; @@ -13,10 +20,12 @@ @Service public class UserServiceImpl implements UserService { - @Resource - UserRepository userRepository; + Logger logger= LoggerFactory.getLogger(UserServiceImpl.class); + // 两阶段事务(支持夸库事务) @Override + @ShardingTransactionType(TransactionType.XA) + @Transactional(rollbackFor = Throwable.class) public Integer addUser(User user) { // 强制路由主库 @@ -24,14 +33,84 @@ public Integer addUser(User user) { return userRepository.addUser(user); } + @Resource + UserRepository userRepository; + + @Resource + UserInfoRepository userInfoRepository; + + + + // 两阶段事务(支持夸库事务) + @Override + @ShardingTransactionType(TransactionType.XA) + @Transactional(rollbackFor = Throwable.class) + public Integer addUserInfo(UserInfo userInfo) { + + // 强制路由主库 + //HintManager.getInstance().setMasterRouteOnly(); + return userInfoRepository.addUserInfo(userInfo); + } + @Override public List list() { - return userRepository.list(); } + @Override + public List listInfo() { + return userInfoRepository.list(); + } + @Override public void deleteAll() { userRepository.deleteAll(); } + + @Override + //@ShardingTransactionType(TransactionType.XA) + @Transactional(rollbackFor = Throwable.class) + public Integer addUserBash() { + + // 强制路由主库 + //HintManager.getInstance().setMasterRouteOnly(); + Integer resutl = 0; + for(int i=121;i<201;i++) { + User user = new User(); + user.setId(i); + user.setUsername("forezp"+(i)); + user.setPassword("1233edwd"); + resutl += userRepository.addUser(user); + if (i == 140) { + int a = i/0; + } + logger.info("insert:"+user.toString()+" result:"+resutl); + } + return resutl; + + } + + @Override + @ShardingTransactionType(TransactionType.XA) + @Transactional(rollbackFor = Throwable.class) + public Integer addUserInfoandUser() { + Integer resutl = 0; + for (int i=150;i<300;i++) { + UserInfo userInfo = new UserInfo(); + userInfo.setId(i); + userInfo.setAge(i); + userInfo.setName("Tom"+i); + userInfo.setUserId(i); + resutl += userInfoRepository.addUserInfo(userInfo); + User user = new User(); + user.setId(i); + user.setUsername("forezp"+(i)); + user.setPassword("1233edwd"); + resutl += userRepository.addUser(user); + + } + + return resutl; + } + } diff --git a/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/java/com/forezp/shardingjdbcdbmstbl/web/UserController.java b/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/java/com/forezp/shardingjdbcdbmstbl/web/UserController.java index 3472aff..2dba4f5 100755 --- a/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/java/com/forezp/shardingjdbcdbmstbl/web/UserController.java +++ b/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/java/com/forezp/shardingjdbcdbmstbl/web/UserController.java @@ -2,6 +2,7 @@ import com.forezp.shardingjdbcdbmstbl.entity.User; +import com.forezp.shardingjdbcdbmstbl.entity.UserInfo; import com.forezp.shardingjdbcdbmstbl.service.UserService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,6 +28,20 @@ public Object list() { return list; } + @GetMapping("/userInfos") + public Object listinfo() { + List list= userService.listInfo(); + //Collections.sort(list); + return list; + } + + @GetMapping("/aaa") + public Object aaa() { + //Collections.sort(list); + userService.addUserInfoandUser(); + return 0 ; + } + @GetMapping("/add") public Object add() { @@ -41,6 +56,25 @@ public Object add() { return "ok"; } + + @GetMapping("/addUserInfo") + public Object addUserInfo() { + for (int i=1;i<10;i++) { + UserInfo userInfo = new UserInfo(); + userInfo.setId(i); + userInfo.setAge(i); + userInfo.setName("Tom"+i); + userService.addUserInfo(userInfo); + } + return "ok"; + } + + + @GetMapping("/addBash") + public Object addBash() { + userService.addUserBash(); + return "ok"; + } @GetMapping("/delete") public Object delete() { userService.deleteAll(); diff --git a/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/resources/META-INF/mybatis-config.xml b/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/resources/META-INF/mybatis-config.xml index fc85077..c465289 100755 --- a/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/resources/META-INF/mybatis-config.xml +++ b/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/resources/META-INF/mybatis-config.xml @@ -3,10 +3,16 @@ PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> + + + +
      +
        + diff --git a/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/resources/application.properties b/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/resources/application.properties index 54143fc..80e7ccd 100755 --- a/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/resources/application.properties +++ b/sharding-jdbc-example/sharding-jdbc-db-ms-tbl/src/main/resources/application.properties @@ -5,38 +5,39 @@ sharding.jdbc.datasource.names=ds-master-0,ds-master-1,ds-master-0-slave-0,ds-ma sharding.jdbc.datasource.ds-master-0.type=com.alibaba.druid.pool.DruidDataSource sharding.jdbc.datasource.ds-master-0.driver-class-name=com.mysql.jdbc.Driver -sharding.jdbc.datasource.ds-master-0.url=jdbc:mysql://{master-host}:3306/cool?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMT +sharding.jdbc.datasource.ds-master-0.url=jdbc:mysql://192.168.3.66:3306/cool?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMT sharding.jdbc.datasource.ds-master-0.username=root -sharding.jdbc.datasource.ds-master-0.password=root123 +sharding.jdbc.datasource.ds-master-0.password=123456 sharding.jdbc.datasource.ds-master-0-slave-0.type=com.alibaba.druid.pool.DruidDataSource sharding.jdbc.datasource.ds-master-0-slave-0.driver-class-name=com.mysql.jdbc.Driver -sharding.jdbc.datasource.ds-master-0-slave-0.url=jdbc:mysql://{slave1-host}:3306/cool?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT +sharding.jdbc.datasource.ds-master-0-slave-0.url=jdbc:mysql://192.168.3.66:3306/cool?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT sharding.jdbc.datasource.ds-master-0-slave-0.username=root -sharding.jdbc.datasource.ds-master-0-slave-0.password=root123 +sharding.jdbc.datasource.ds-master-0-slave-0.password=123456 sharding.jdbc.datasource.ds-master-0-slave-1.type=com.alibaba.druid.pool.DruidDataSource sharding.jdbc.datasource.ds-master-0-slave-1.driver-class-name=com.mysql.jdbc.Driver -sharding.jdbc.datasource.ds-master-0-slave-1.url=jdbc:mysql://{slave2-host}:3306/cool?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT +sharding.jdbc.datasource.ds-master-0-slave-1.url=jdbc:mysql://192.168.3.66:3306/cool?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT sharding.jdbc.datasource.ds-master-0-slave-1.username=root -sharding.jdbc.datasource.ds-master-0-slave-1.password=root123 +sharding.jdbc.datasource.ds-master-0-slave-1.password=123456 sharding.jdbc.datasource.ds-master-1.type=com.alibaba.druid.pool.DruidDataSource sharding.jdbc.datasource.ds-master-1.driver-class-name=com.mysql.jdbc.Driver -sharding.jdbc.datasource.ds-master-1.url=jdbc:mysql://{master-host}:3306/cool2?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMT +sharding.jdbc.datasource.ds-master-1.url=jdbc:mysql://192.168.3.66:3306/cool2?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMT sharding.jdbc.datasource.ds-master-1.username=root -sharding.jdbc.datasource.ds-master-1.password=root123 +sharding.jdbc.datasource.ds-master-1.password=123456 sharding.jdbc.datasource.ds-master-1-slave-0.type=com.alibaba.druid.pool.DruidDataSource sharding.jdbc.datasource.ds-master-1-slave-0.driver-class-name=com.mysql.jdbc.Driver -sharding.jdbc.datasource.ds-master-1-slave-0.url=jdbc:mysql://{slave1-host}:3306/cool2?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT +sharding.jdbc.datasource.ds-master-1-slave-0.url=jdbc:mysql://192.168.3.66:3306/cool2?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT sharding.jdbc.datasource.ds-master-1-slave-0.username=root -sharding.jdbc.datasource.ds-master-1-slave-0.password=root123 +sharding.jdbc.datasource.ds-master-1-slave-0.password=123456 sharding.jdbc.datasource.ds-master-1-slave-1.type=com.alibaba.druid.pool.DruidDataSource sharding.jdbc.datasource.ds-master-1-slave-1.driver-class-name=com.mysql.jdbc.Driver -sharding.jdbc.datasource.ds-master-1-slave-1.url=jdbc:mysql://{slave2-host}:3306/cool2?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT +sharding.jdbc.datasource.ds-master-1-slave-1.url=jdbc:mysql://192.168.3.66:3306/cool2?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT sharding.jdbc.datasource.ds-master-1-slave-1.username=root -sharding.jdbc.datasource.ds-master-1-slave-1.password=root123 +sharding.jdbc.datasource.ds-master-1-slave-1.password=123456 +sharding.jdbc.config.sharding.default-data-source-name=ds-master-0 sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=id sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds_$->{id % 2} @@ -54,6 +55,8 @@ sharding.jdbc.config.sharding.master-slave-rules.ds_0.slave-data-source-names=ds sharding.jdbc.config.sharding.master-slave-rules.ds_1.master-data-source-name=ds-master-1 sharding.jdbc.config.sharding.master-slave-rules.ds_1.slave-data-source-names=ds-master-1-slave-0, ds-master-1-slave-1 +sharding.jdbc.config.sharding.props.sql.show=true + mybatis.config-location=classpath:META-INF/mybatis-config.xml server.port=8085

        AltStyle によって変換されたページ (->オリジナル) /