+ * 事务支持 支持TransactionType.LOCAL, TransactionType.XA(已经配置), TransactionType.BASE
*/
- public Order updateByCondition(Order order){
+ @Transactional(value = "transactionManager")
+ @ShardingTransactionType(TransactionType.XA)
+ public Order updateByCondition(Order order) {
return orderRepository.save(order);
}
/**
* 删除
*/
- public void deleterByCondition(Order order){
+ public void deleterByCondition(Order order) {
orderRepository.delete(order);
}
diff --git a/sharding-multiple-data-sources/src/main/resources/application-sharddb.properties b/sharding-multiple-data-sources/src/main/resources/application-sharddb.properties
index be54cab..0a8cd63 100644
--- a/sharding-multiple-data-sources/src/main/resources/application-sharddb.properties
+++ b/sharding-multiple-data-sources/src/main/resources/application-sharddb.properties
@@ -1,22 +1,23 @@
spring.shardingsphere.datasource.names=ds0,ds1
spring.shardingsphere.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource
-spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver
-spring.shardingsphere.datasource.ds0.url=jdbc:mysql://localhost:3306/shard-3
+spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
+spring.shardingsphere.datasource.ds0.url=jdbc:mysql://127.0.0.1:3306/shard-1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8&useTimezone=true
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=root
spring.shardingsphere.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
-spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver
-spring.shardingsphere.datasource.ds1.url=jdbc:mysql://localhost:3306/shard-4
+spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
+spring.shardingsphere.datasource.ds1.url=jdbc:mysql://127.0.0.1:3306/shard-2?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8&useTimezone=true
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=root
-spring.shardingsphere.sharding.tables.order.actual-data-nodes=ds$->{0..1}.order$->{0..1}
-spring.shardingsphere.sharding.tables.order.table-strategy.inline.sharding-column=id
-spring.shardingsphere.sharding.tables.order.table-strategy.inline.algorithm-expression=id$->{id % 2}
-spring.shardingsphere.sharding.tables.order.key-generator.column=userid
-spring.shardingsphere.sharding.tables.order.key-generator.type=SNOWFLAKE
-
spring.shardingsphere.sharding.default-database-strategy.inline.sharding-column=id
-spring.shardingsphere.sharding.default-database-strategy.inline.algorithm-expression=ds$->{id % 2}
\ No newline at end of file
+spring.shardingsphere.sharding.default-database-strategy.inline.algorithm-expression=ds$->{id % 2}
+
+spring.shardingsphere.sharding.tables.t_order.actual-data-nodes=ds$->{0..1}.t_order_$->{0..1}
+spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.sharding-column=user_id
+spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order_$->{user_id % 2}
+spring.shardingsphere.sharding.tables.t_order.key-generator.column=id
+spring.shardingsphere.sharding.tables.t_order.key-generator.type=SNOWFLAKE
+
diff --git a/sharding-multiple-data-sources/src/main/resources/application.yml b/sharding-multiple-data-sources/src/main/resources/application.yml
index b1ee1e5..99243eb 100644
--- a/sharding-multiple-data-sources/src/main/resources/application.yml
+++ b/sharding-multiple-data-sources/src/main/resources/application.yml
@@ -9,4 +9,6 @@ spring:
properties:
hibernate:
show_sql: true
-
+ database: mysql
+ main:
+ allow-bean-definition-overriding: true
diff --git a/sharding-multiple-data-sources/src/test/java/com/baiye/service/ShardServiceTest.java b/sharding-multiple-data-sources/src/test/java/com/baiye/service/ShardServiceTest.java
index ca75e9a..7dc6caf 100644
--- a/sharding-multiple-data-sources/src/test/java/com/baiye/service/ShardServiceTest.java
+++ b/sharding-multiple-data-sources/src/test/java/com/baiye/service/ShardServiceTest.java
@@ -4,13 +4,25 @@ package com.baiye.service;
import com.baiye.ShardingMultipleDataSourceApplication;
import com.baiye.dao.OrderRepository;
import com.baiye.domain.Order;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.PreparedStatementCallback;
import org.springframework.test.context.junit4.SpringRunner;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 测试总结:
+ *
+ * 目前自己测试:
+ * - 增查时候使用JPA可以满足
+ * - 在删除和修改时候使用原生 JdbcTemplate 能更好满足需求
+ */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ShardingMultipleDataSourceApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ShardServiceTest {
@@ -28,30 +40,90 @@ public class ShardServiceTest {
@Test
public void insertOne() {
Order order = new Order();
- order.setOrdername("111");
+ order.setOrderName("111");
+ order.setUserId(1L);
Order order1 = shardService.insertOne(order);
System.out.println("order1 = " + order1);
}
@Test
public void batchInsert() {
- for (int i = 1; i < 1000; i++) {
+ List