├── multipledatasources2
├── transaction-logs
│ ├── 192.168.16.43.tm0.epoch
│ └── tmlog0.log
├── .mvn
│ └── wrapper
│ │ ├── maven-wrapper.properties
│ │ └── maven-wrapper.jar
├── src
│ └── main
│ │ ├── java
│ │ └── com
│ │ │ └── mzd
│ │ │ └── multipledatasources
│ │ │ ├── mapper
│ │ │ ├── test01
│ │ │ │ └── TransactionMapping1.java
│ │ │ └── test02
│ │ │ │ └── TransactionMapping2.java
│ │ │ ├── MultipleDataSourcesApplication.java
│ │ │ ├── dao
│ │ │ ├── test01
│ │ │ │ └── TransactionDao1.java
│ │ │ └── test02
│ │ │ │ └── TransactionDao2.java
│ │ │ ├── bean
│ │ │ ├── TeachersBean.java
│ │ │ └── TestBean.java
│ │ │ ├── service
│ │ │ ├── TransactionService2.java
│ │ │ └── TransactionService1.java
│ │ │ ├── datasource
│ │ │ ├── DataSourceConfig2.java
│ │ │ └── DataSourceConfig1.java
│ │ │ └── controller
│ │ │ └── TransactionController.java
│ │ └── resources
│ │ ├── mapping
│ │ ├── test01
│ │ │ └── TransactionMapping1.xml
│ │ └── test02
│ │ │ └── TransactionMapping2.xml
│ │ └── application.properties
├── .gitignore
├── pom.xml
├── mvnw.cmd
└── mvnw
├── multipledatasources3
├── transaction-logs
│ ├── 192.168.16.43.tm7.epoch
│ └── tmlog7.log
├── .mvn
│ └── wrapper
│ │ ├── maven-wrapper.properties
│ │ └── maven-wrapper.jar
├── src
│ └── main
│ │ ├── java
│ │ └── com
│ │ │ └── mzd
│ │ │ └── multipledatasources
│ │ │ ├── mapper
│ │ │ ├── test01
│ │ │ │ └── TransactionMapping1.java
│ │ │ └── test02
│ │ │ │ └── TransactionMapping2.java
│ │ │ ├── dao
│ │ │ ├── test01
│ │ │ │ └── TransactionDao1.java
│ │ │ └── test02
│ │ │ │ └── TransactionDao2.java
│ │ │ ├── bean
│ │ │ ├── TeachersBean.java
│ │ │ └── TestBean.java
│ │ │ ├── service
│ │ │ ├── TransactionService2.java
│ │ │ └── TransactionService1.java
│ │ │ ├── datasource
│ │ │ ├── Datasource2.java
│ │ │ ├── Datasource1.java
│ │ │ ├── AtomikosDataSourceConfig1.java
│ │ │ └── AtomikosDataSourceConfig2.java
│ │ │ ├── MultipleDataSourcesApplication.java
│ │ │ └── controller
│ │ │ └── TransactionController.java
│ │ └── resources
│ │ ├── mapping
│ │ ├── test01
│ │ │ └── TransactionMapping1.xml
│ │ └── test02
│ │ │ └── TransactionMapping2.xml
│ │ └── application.properties
├── .gitignore
├── pom.xml
├── mvnw.cmd
└── mvnw
├── multipledatasources4
├── transaction-logs
│ ├── 192.168.16.43.tm0.epoch
│ └── tmlog0.log
├── .mvn
│ └── wrapper
│ │ ├── maven-wrapper.properties
│ │ └── maven-wrapper.jar
├── src
│ └── main
│ │ ├── java
│ │ └── com
│ │ │ └── mzd
│ │ │ └── multipledatasources
│ │ │ ├── mapper
│ │ │ ├── TransactionMapping1.java
│ │ │ └── TransactionMapping2.java
│ │ │ ├── datasource
│ │ │ ├── DynamicDataSource.java
│ │ │ ├── DataSourceAop.java
│ │ │ ├── DataSourceType.java
│ │ │ └── DataSourceConfig.java
│ │ │ ├── dao
│ │ │ ├── TransactionDao1.java
│ │ │ └── TransactionDao2.java
│ │ │ ├── MultipleDataSourcesApplication.java
│ │ │ ├── service
│ │ │ ├── TransactionService1.java
│ │ │ └── TransactionService2.java
│ │ │ ├── bean
│ │ │ ├── TeachersBean.java
│ │ │ └── TestBean.java
│ │ │ └── controller
│ │ │ └── TransactionController.java
│ │ └── resources
│ │ ├── mapping
│ │ ├── TransactionMapping1.xml
│ │ └── TransactionMapping2.xml
│ │ └── application.properties
├── .gitignore
├── pom.xml
├── mvnw.cmd
└── mvnw
├── README.md
└── LICENSE
/multipledatasources2/transaction-logs/192.168.16.43.tm0.epoch:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/multipledatasources3/transaction-logs/192.168.16.43.tm7.epoch:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/multipledatasources4/transaction-logs/192.168.16.43.tm0.epoch:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/multipledatasources2/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.3/apache-maven-3.5.3-bin.zip
2 |
--------------------------------------------------------------------------------
/multipledatasources2/transaction-logs/tmlog0.log:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mzd123/springboot-multipledatasources/HEAD/multipledatasources2/transaction-logs/tmlog0.log
--------------------------------------------------------------------------------
/multipledatasources3/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.3/apache-maven-3.5.3-bin.zip
2 |
--------------------------------------------------------------------------------
/multipledatasources3/transaction-logs/tmlog7.log:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mzd123/springboot-multipledatasources/HEAD/multipledatasources3/transaction-logs/tmlog7.log
--------------------------------------------------------------------------------
/multipledatasources4/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.3/apache-maven-3.5.3-bin.zip
2 |
--------------------------------------------------------------------------------
/multipledatasources4/transaction-logs/tmlog0.log:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mzd123/springboot-multipledatasources/HEAD/multipledatasources4/transaction-logs/tmlog0.log
--------------------------------------------------------------------------------
/multipledatasources2/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mzd123/springboot-multipledatasources/HEAD/multipledatasources2/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/multipledatasources3/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mzd123/springboot-multipledatasources/HEAD/multipledatasources3/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/multipledatasources4/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mzd123/springboot-multipledatasources/HEAD/multipledatasources4/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/multipledatasources4/src/main/java/com/mzd/multipledatasources/mapper/TransactionMapping1.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.mapper;
2 |
3 | import org.springframework.stereotype.Repository;
4 |
5 | import com.mzd.multipledatasources.bean.TestBean;
6 |
7 | @Repository
8 | public interface TransactionMapping1 {
9 |
10 | void save(TestBean t);
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/multipledatasources4/src/main/java/com/mzd/multipledatasources/mapper/TransactionMapping2.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.mapper;
2 |
3 | import org.springframework.stereotype.Repository;
4 |
5 | import com.mzd.multipledatasources.bean.TeachersBean;
6 |
7 | @Repository
8 | public interface TransactionMapping2 {
9 |
10 | void save(TeachersBean t);
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/multipledatasources2/src/main/java/com/mzd/multipledatasources/mapper/test01/TransactionMapping1.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.mapper.test01;
2 |
3 | import org.springframework.stereotype.Repository;
4 |
5 | import com.mzd.multipledatasources.bean.TestBean;
6 |
7 | @Repository
8 | public interface TransactionMapping1 {
9 |
10 | void save(TestBean t);
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/multipledatasources3/src/main/java/com/mzd/multipledatasources/mapper/test01/TransactionMapping1.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.mapper.test01;
2 |
3 | import org.springframework.stereotype.Repository;
4 |
5 | import com.mzd.multipledatasources.bean.TestBean;
6 |
7 | @Repository
8 | public interface TransactionMapping1 {
9 |
10 | void save(TestBean t);
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/multipledatasources2/src/main/java/com/mzd/multipledatasources/mapper/test02/TransactionMapping2.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.mapper.test02;
2 |
3 | import org.springframework.stereotype.Repository;
4 |
5 | import com.mzd.multipledatasources.bean.TeachersBean;
6 |
7 | @Repository
8 | public interface TransactionMapping2 {
9 |
10 | void save(TeachersBean t);
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/multipledatasources3/src/main/java/com/mzd/multipledatasources/mapper/test02/TransactionMapping2.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.mapper.test02;
2 |
3 | import org.springframework.stereotype.Repository;
4 |
5 | import com.mzd.multipledatasources.bean.TeachersBean;
6 |
7 | @Repository
8 | public interface TransactionMapping2 {
9 |
10 | void save(TeachersBean t);
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/multipledatasources2/.gitignore:
--------------------------------------------------------------------------------
1 | /target/
2 | !.mvn/wrapper/maven-wrapper.jar
3 |
4 | ### STS ###
5 | .apt_generated
6 | .classpath
7 | .factorypath
8 | .project
9 | .settings
10 | .springBeans
11 | .sts4-cache
12 |
13 | ### IntelliJ IDEA ###
14 | .idea
15 | *.iws
16 | *.iml
17 | *.ipr
18 |
19 | ### NetBeans ###
20 | /nbproject/private/
21 | /build/
22 | /nbbuild/
23 | /dist/
24 | /nbdist/
25 | /.nb-gradle/
--------------------------------------------------------------------------------
/multipledatasources3/.gitignore:
--------------------------------------------------------------------------------
1 | /target/
2 | !.mvn/wrapper/maven-wrapper.jar
3 |
4 | ### STS ###
5 | .apt_generated
6 | .classpath
7 | .factorypath
8 | .project
9 | .settings
10 | .springBeans
11 | .sts4-cache
12 |
13 | ### IntelliJ IDEA ###
14 | .idea
15 | *.iws
16 | *.iml
17 | *.ipr
18 |
19 | ### NetBeans ###
20 | /nbproject/private/
21 | /build/
22 | /nbbuild/
23 | /dist/
24 | /nbdist/
25 | /.nb-gradle/
--------------------------------------------------------------------------------
/multipledatasources4/.gitignore:
--------------------------------------------------------------------------------
1 | /target/
2 | !.mvn/wrapper/maven-wrapper.jar
3 |
4 | ### STS ###
5 | .apt_generated
6 | .classpath
7 | .factorypath
8 | .project
9 | .settings
10 | .springBeans
11 | .sts4-cache
12 |
13 | ### IntelliJ IDEA ###
14 | .idea
15 | *.iws
16 | *.iml
17 | *.ipr
18 |
19 | ### NetBeans ###
20 | /nbproject/private/
21 | /build/
22 | /nbbuild/
23 | /dist/
24 | /nbdist/
25 | /.nb-gradle/
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # springboot-multipledatasources
2 | springboot中多数据源整合的总结
3 |
4 | sql脚本在multipledatasources中,4个项目都是同一个sql脚本
5 |
6 | multipledatasources:
7 | jpa-mybatis-多数据源的整合,其目的就是jpa用来增删改,mybatis用来查询,我认为没有比mybatis更适合查询的框架了。
8 | 还有就是测试了异步和定时任务的功能
9 |
10 | multipledatasources2:
11 | 通过分包实现多数据源的,检测多数据源存在的事务管理问题
12 |
13 | multipledatasources3:
14 | 通过jta-atomikos解决传统项目多数据源事务管理问题
15 |
16 | multipledatasources4:
17 | 通过aop的方式实现多数据源
18 |
--------------------------------------------------------------------------------
/multipledatasources4/src/main/resources/mapping/TransactionMapping1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | insert into cs_test
6 | values(#{id},
7 | #{userid},#{score},#{classid})
8 |
9 |
--------------------------------------------------------------------------------
/multipledatasources2/src/main/resources/mapping/test01/TransactionMapping1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | insert into cs_test
6 | values(#{id},
7 | #{userid},#{score},#{classid})
8 |
9 |
--------------------------------------------------------------------------------
/multipledatasources3/src/main/resources/mapping/test01/TransactionMapping1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | insert into cs_test
6 | values(#{id},
7 | #{userid},#{score},#{classid})
8 |
9 |
--------------------------------------------------------------------------------
/multipledatasources4/src/main/resources/mapping/TransactionMapping2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | insert into
7 | cs_teacher
8 | values(#{id},#{teachername},#{classid})
9 |
10 |
11 |
--------------------------------------------------------------------------------
/multipledatasources4/src/main/java/com/mzd/multipledatasources/datasource/DynamicDataSource.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.datasource;
2 |
3 | import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
4 |
5 | public class DynamicDataSource extends AbstractRoutingDataSource {
6 |
7 | @Override
8 | protected Object determineCurrentLookupKey() {
9 | DataSourceType.DataBaseType dataBaseType = DataSourceType.getDataBaseType();
10 | return dataBaseType;
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/multipledatasources2/src/main/resources/mapping/test02/TransactionMapping2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | insert into
7 | cs_teacher
8 | values(#{id},#{teachername},#{classid})
9 |
10 |
11 |
--------------------------------------------------------------------------------
/multipledatasources3/src/main/resources/mapping/test02/TransactionMapping2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | insert into
7 | cs_teacher
8 | values(#{id},#{teachername},#{classid})
9 |
10 |
11 |
--------------------------------------------------------------------------------
/multipledatasources4/src/main/java/com/mzd/multipledatasources/dao/TransactionDao1.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.dao;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.stereotype.Component;
5 |
6 | import com.mzd.multipledatasources.bean.TestBean;
7 | import com.mzd.multipledatasources.mapper.TransactionMapping1;
8 |
9 | @Component
10 |
11 | public class TransactionDao1 {
12 | @Autowired
13 | private TransactionMapping1 tm1;
14 |
15 | public void save(TestBean t) {
16 | tm1.save(t);
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/multipledatasources4/src/main/java/com/mzd/multipledatasources/dao/TransactionDao2.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.dao;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.stereotype.Component;
5 |
6 | import com.mzd.multipledatasources.bean.TeachersBean;
7 | import com.mzd.multipledatasources.mapper.TransactionMapping2;
8 |
9 | @Component
10 | public class TransactionDao2 {
11 | @Autowired
12 | private TransactionMapping2 tm2;
13 |
14 | public void save(TeachersBean t) {
15 | tm2.save(t);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/multipledatasources2/src/main/java/com/mzd/multipledatasources/MultipleDataSourcesApplication.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources;
2 |
3 | import org.mybatis.spring.annotation.MapperScan;
4 | import org.springframework.boot.SpringApplication;
5 | import org.springframework.boot.autoconfigure.SpringBootApplication;
6 |
7 | @SpringBootApplication
8 | @MapperScan("com.mzd.multipledatasources.mapper")
9 | public class MultipleDataSourcesApplication {
10 |
11 | public static void main(String[] args) {
12 | SpringApplication.run(MultipleDataSourcesApplication.class, args);
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/multipledatasources2/src/main/java/com/mzd/multipledatasources/dao/test01/TransactionDao1.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.dao.test01;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.stereotype.Component;
5 |
6 | import com.mzd.multipledatasources.bean.TestBean;
7 | import com.mzd.multipledatasources.mapper.test01.TransactionMapping1;
8 |
9 | @Component
10 |
11 | public class TransactionDao1 {
12 | @Autowired
13 | private TransactionMapping1 tm1;
14 |
15 | public void save(TestBean t) {
16 | tm1.save(t);
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/multipledatasources2/src/main/java/com/mzd/multipledatasources/dao/test02/TransactionDao2.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.dao.test02;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.stereotype.Component;
5 |
6 | import com.mzd.multipledatasources.bean.TeachersBean;
7 | import com.mzd.multipledatasources.mapper.test02.TransactionMapping2;
8 |
9 | @Component
10 | public class TransactionDao2 {
11 | @Autowired
12 | private TransactionMapping2 tm2;
13 |
14 | public void save(TeachersBean t) {
15 | tm2.save(t);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/multipledatasources3/src/main/java/com/mzd/multipledatasources/dao/test01/TransactionDao1.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.dao.test01;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.stereotype.Component;
5 |
6 | import com.mzd.multipledatasources.bean.TestBean;
7 | import com.mzd.multipledatasources.mapper.test01.TransactionMapping1;
8 |
9 | @Component
10 |
11 | public class TransactionDao1 {
12 | @Autowired
13 | private TransactionMapping1 tm1;
14 |
15 | public void save(TestBean t) {
16 | tm1.save(t);
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/multipledatasources3/src/main/java/com/mzd/multipledatasources/dao/test02/TransactionDao2.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.dao.test02;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.stereotype.Component;
5 |
6 | import com.mzd.multipledatasources.bean.TeachersBean;
7 | import com.mzd.multipledatasources.mapper.test02.TransactionMapping2;
8 |
9 | @Component
10 | public class TransactionDao2 {
11 | @Autowired
12 | private TransactionMapping2 tm2;
13 |
14 | public void save(TeachersBean t) {
15 | tm2.save(t);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/multipledatasources4/src/main/java/com/mzd/multipledatasources/MultipleDataSourcesApplication.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources;
2 |
3 | import org.mybatis.spring.annotation.MapperScan;
4 | import org.springframework.boot.SpringApplication;
5 | import org.springframework.boot.autoconfigure.SpringBootApplication;
6 |
7 | @SpringBootApplication
8 |
9 | @MapperScan("com.mzd.multipledatasources.mapper")
10 | public class MultipleDataSourcesApplication {
11 |
12 | public static void main(String[] args) {
13 | SpringApplication.run(MultipleDataSourcesApplication.class, args);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/multipledatasources4/src/main/java/com/mzd/multipledatasources/service/TransactionService1.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.service;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.stereotype.Service;
5 | import org.springframework.transaction.annotation.Transactional;
6 |
7 | import com.mzd.multipledatasources.bean.TestBean;
8 | import com.mzd.multipledatasources.dao.TransactionDao1;
9 |
10 | @Service
11 | public class TransactionService1 {
12 | @Autowired
13 | private TransactionDao1 ts1;
14 |
15 | @Transactional
16 | public void test01_saveTestBean(TestBean t) {
17 | ts1.save(t);
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/multipledatasources4/src/main/java/com/mzd/multipledatasources/service/TransactionService2.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.service;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.stereotype.Service;
5 | import org.springframework.transaction.annotation.Transactional;
6 |
7 | import com.mzd.multipledatasources.bean.TeachersBean;
8 | import com.mzd.multipledatasources.dao.TransactionDao2;
9 |
10 | @Service
11 | public class TransactionService2 {
12 | @Autowired
13 | private TransactionDao2 ts2;
14 |
15 | @Transactional
16 | public void test02_saveTeachersBean(TeachersBean t) {
17 | ts2.save(t);
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/multipledatasources2/src/main/java/com/mzd/multipledatasources/bean/TeachersBean.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.bean;
2 |
3 | public class TeachersBean {
4 |
5 | private String id;
6 | private String teachername;
7 | private String classid;
8 |
9 | public String getId() {
10 | return id;
11 | }
12 |
13 | public void setId(String id) {
14 | this.id = id;
15 | }
16 |
17 | public String getTeachername() {
18 | return teachername;
19 | }
20 |
21 | public void setTeachername(String teachername) {
22 | this.teachername = teachername;
23 | }
24 |
25 | public String getClassid() {
26 | return classid;
27 | }
28 |
29 | public void setClassid(String classid) {
30 | this.classid = classid;
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/multipledatasources3/src/main/java/com/mzd/multipledatasources/bean/TeachersBean.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.bean;
2 |
3 | public class TeachersBean {
4 |
5 | private String id;
6 | private String teachername;
7 | private String classid;
8 |
9 | public String getId() {
10 | return id;
11 | }
12 |
13 | public void setId(String id) {
14 | this.id = id;
15 | }
16 |
17 | public String getTeachername() {
18 | return teachername;
19 | }
20 |
21 | public void setTeachername(String teachername) {
22 | this.teachername = teachername;
23 | }
24 |
25 | public String getClassid() {
26 | return classid;
27 | }
28 |
29 | public void setClassid(String classid) {
30 | this.classid = classid;
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/multipledatasources4/src/main/java/com/mzd/multipledatasources/bean/TeachersBean.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.bean;
2 |
3 | public class TeachersBean {
4 |
5 | private String id;
6 | private String teachername;
7 | private String classid;
8 |
9 | public String getId() {
10 | return id;
11 | }
12 |
13 | public void setId(String id) {
14 | this.id = id;
15 | }
16 |
17 | public String getTeachername() {
18 | return teachername;
19 | }
20 |
21 | public void setTeachername(String teachername) {
22 | this.teachername = teachername;
23 | }
24 |
25 | public String getClassid() {
26 | return classid;
27 | }
28 |
29 | public void setClassid(String classid) {
30 | this.classid = classid;
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/multipledatasources3/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | server.port=8080
2 | ## test1 database
3 | spring.datasource.test1.url=jdbc:mysql://localhost:3307/multipledatasource1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
4 | spring.datasource.test1.username=root
5 | spring.datasource.test1.password=root
6 | spring.datasource.test1.driver-class-name=com.mysql.cj.jdbc.Driver
7 | ## test2 database
8 | spring.datasource.test2.url=jdbc:mysql://localhost:3307/multipledatasource2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
9 | spring.datasource.test2.username=root
10 | spring.datasource.test2.password=root
11 | spring.datasource.test2.driver-class-name=com.mysql.cj.jdbc.Driver
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/multipledatasources2/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | server.port=8080
2 | ## test1 database
3 | spring.datasource.test1.url=jdbc:mysql://localhost:3307/multipledatasource1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
4 | spring.datasource.test1.username=root
5 | spring.datasource.test1.password=root
6 | spring.datasource.test1.driver-class-name=com.mysql.cj.jdbc.Driver
7 | ## test2 database
8 | spring.datasource.test2.url=jdbc:mysql://localhost:3307/multipledatasource2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
9 | spring.datasource.test2.username=root
10 | spring.datasource.test2.password=root
11 | spring.datasource.test2.driver-class-name=com.mysql.cj.jdbc.Driver
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/multipledatasources4/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | server.port=8080
2 | ## test1 database
3 | spring.datasource.test1.url=jdbc:mysql://localhost:3307/multipledatasource1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
4 | spring.datasource.test1.username=root
5 | spring.datasource.test1.password=root
6 | spring.datasource.test1.driver-class-name=com.mysql.cj.jdbc.Driver
7 | ## test2 database
8 | spring.datasource.test2.url=jdbc:mysql://localhost:3307/multipledatasource2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
9 | spring.datasource.test2.username=root
10 | spring.datasource.test2.password=root
11 | spring.datasource.test2.driver-class-name=com.mysql.cj.jdbc.Driver
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/multipledatasources2/src/main/java/com/mzd/multipledatasources/service/TransactionService2.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.service;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.stereotype.Service;
5 | import org.springframework.transaction.annotation.Transactional;
6 |
7 | import com.mzd.multipledatasources.bean.TeachersBean;
8 | import com.mzd.multipledatasources.dao.test02.TransactionDao2;
9 |
10 | @Service
11 | public class TransactionService2 {
12 | @Autowired
13 | private TransactionDao2 ts2;
14 |
15 | @Transactional
16 | public void saveTeacher(TeachersBean t) {
17 | ts2.save(t);
18 | }
19 |
20 | @Transactional
21 | public void saveTeacher2(TeachersBean t) {
22 | int i = 1 / 0;
23 | ts2.save(t);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/multipledatasources3/src/main/java/com/mzd/multipledatasources/service/TransactionService2.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.service;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.stereotype.Service;
5 | import org.springframework.transaction.annotation.Transactional;
6 |
7 | import com.mzd.multipledatasources.bean.TeachersBean;
8 | import com.mzd.multipledatasources.dao.test02.TransactionDao2;
9 |
10 | @Service
11 | public class TransactionService2 {
12 | @Autowired
13 | private TransactionDao2 ts2;
14 |
15 | @Transactional
16 | public void saveTeacher(TeachersBean t) {
17 | ts2.save(t);
18 | }
19 |
20 | @Transactional
21 | public void saveTeacher2(TeachersBean t) {
22 | int i = 1 / 0;
23 | ts2.save(t);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/multipledatasources3/src/main/java/com/mzd/multipledatasources/datasource/Datasource2.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.datasource;
2 |
3 | import org.springframework.boot.context.properties.ConfigurationProperties;
4 |
5 | @ConfigurationProperties(prefix = "spring.datasource.test2")
6 | public class Datasource2 {
7 | private String url;
8 | private String username;
9 | private String password;
10 |
11 | public String getUrl() {
12 | return url;
13 | }
14 |
15 | public void setUrl(String url) {
16 | this.url = url;
17 | }
18 |
19 | public String getUsername() {
20 | return username;
21 | }
22 |
23 | public void setUsername(String username) {
24 | this.username = username;
25 | }
26 |
27 | public String getPassword() {
28 | return password;
29 | }
30 |
31 | public void setPassword(String password) {
32 | this.password = password;
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/multipledatasources4/src/main/java/com/mzd/multipledatasources/datasource/DataSourceAop.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.datasource;
2 |
3 | import org.aspectj.lang.annotation.Aspect;
4 | import org.aspectj.lang.annotation.Before;
5 | import org.springframework.stereotype.Component;
6 |
7 | import com.mzd.multipledatasources.datasource.DataSourceType.DataBaseType;
8 |
9 | @Aspect
10 | @Component
11 | public class DataSourceAop {
12 | @Before("execution(* com.mzd.multipledatasources.service..*.test01*(..))")
13 | public void setDataSource2test01() {
14 | System.err.println("test01业务");
15 | DataSourceType.setDataBaseType(DataBaseType.TEST01);
16 | }
17 |
18 | @Before("execution(* com.mzd.multipledatasources.service..*.test02*(..))")
19 | public void setDataSource2test02() {
20 | System.err.println("test02业务");
21 | DataSourceType.setDataBaseType(DataBaseType.TEST02);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/multipledatasources3/src/main/java/com/mzd/multipledatasources/MultipleDataSourcesApplication.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources;
2 |
3 | import org.mybatis.spring.annotation.MapperScan;
4 | import org.springframework.boot.SpringApplication;
5 | import org.springframework.boot.autoconfigure.SpringBootApplication;
6 | import org.springframework.boot.context.properties.EnableConfigurationProperties;
7 |
8 | import com.mzd.multipledatasources.datasource.Datasource1;
9 | import com.mzd.multipledatasources.datasource.Datasource2;
10 |
11 | @SpringBootApplication
12 | // @EnableConfigurationProperties注解使@ConfigurationProperties注解生效
13 | @EnableConfigurationProperties(value = { Datasource1.class, Datasource2.class })
14 | @MapperScan("com.mzd.multipledatasources.mapper")
15 | public class MultipleDataSourcesApplication {
16 |
17 | public static void main(String[] args) {
18 | SpringApplication.run(MultipleDataSourcesApplication.class, args);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/multipledatasources4/src/main/java/com/mzd/multipledatasources/datasource/DataSourceType.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.datasource;
2 |
3 | public class DataSourceType {
4 |
5 | public enum DataBaseType {
6 | TEST01, TEST02
7 | }
8 |
9 | // 使用ThreadLocal保证线程安全
10 | private static final ThreadLocal TYPE = new ThreadLocal();
11 |
12 | // 往当前线程里设置数据源类型
13 | public static void setDataBaseType(DataBaseType dataBaseType) {
14 | if (dataBaseType == null) {
15 | throw new NullPointerException();
16 | }
17 | System.err.println("[将当前数据源改为]:" + dataBaseType);
18 | TYPE.set(dataBaseType);
19 | }
20 |
21 | // 获取数据源类型
22 | public static DataBaseType getDataBaseType() {
23 | DataBaseType dataBaseType = TYPE.get() == null ? DataBaseType.TEST01 : TYPE.get();
24 | System.err.println("[获取当前数据源的类型为]:" + dataBaseType);
25 | return dataBaseType;
26 | }
27 |
28 | // 清空数据类型
29 | public static void clearDataBaseType() {
30 | TYPE.remove();
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/multipledatasources2/src/main/java/com/mzd/multipledatasources/bean/TestBean.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.bean;
2 |
3 | public class TestBean {
4 | private String id;
5 | private String userid;
6 | private int score;
7 | private String classid;
8 |
9 | public String getId() {
10 | return id;
11 | }
12 |
13 | public void setId(String id) {
14 | this.id = id;
15 | }
16 |
17 | public String getUserid() {
18 | return userid;
19 | }
20 |
21 | public void setUserid(String userid) {
22 | this.userid = userid;
23 | }
24 |
25 | public int getScore() {
26 | return score;
27 | }
28 |
29 | public void setScore(int score) {
30 | this.score = score;
31 | }
32 |
33 | public String getClassid() {
34 | return classid;
35 | }
36 |
37 | public void setClassid(String classid) {
38 | this.classid = classid;
39 | }
40 |
41 | @Override
42 | public String toString() {
43 | return "TestBean [id=" + id + ", userid=" + userid + ", score=" + score + ", classid=" + classid + "]";
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/multipledatasources3/src/main/java/com/mzd/multipledatasources/bean/TestBean.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.bean;
2 |
3 | public class TestBean {
4 | private String id;
5 | private String userid;
6 | private int score;
7 | private String classid;
8 |
9 | public String getId() {
10 | return id;
11 | }
12 |
13 | public void setId(String id) {
14 | this.id = id;
15 | }
16 |
17 | public String getUserid() {
18 | return userid;
19 | }
20 |
21 | public void setUserid(String userid) {
22 | this.userid = userid;
23 | }
24 |
25 | public int getScore() {
26 | return score;
27 | }
28 |
29 | public void setScore(int score) {
30 | this.score = score;
31 | }
32 |
33 | public String getClassid() {
34 | return classid;
35 | }
36 |
37 | public void setClassid(String classid) {
38 | this.classid = classid;
39 | }
40 |
41 | @Override
42 | public String toString() {
43 | return "TestBean [id=" + id + ", userid=" + userid + ", score=" + score + ", classid=" + classid + "]";
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/multipledatasources4/src/main/java/com/mzd/multipledatasources/bean/TestBean.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.bean;
2 |
3 | public class TestBean {
4 | private String id;
5 | private String userid;
6 | private int score;
7 | private String classid;
8 |
9 | public String getId() {
10 | return id;
11 | }
12 |
13 | public void setId(String id) {
14 | this.id = id;
15 | }
16 |
17 | public String getUserid() {
18 | return userid;
19 | }
20 |
21 | public void setUserid(String userid) {
22 | this.userid = userid;
23 | }
24 |
25 | public int getScore() {
26 | return score;
27 | }
28 |
29 | public void setScore(int score) {
30 | this.score = score;
31 | }
32 |
33 | public String getClassid() {
34 | return classid;
35 | }
36 |
37 | public void setClassid(String classid) {
38 | this.classid = classid;
39 | }
40 |
41 | @Override
42 | public String toString() {
43 | return "TestBean [id=" + id + ", userid=" + userid + ", score=" + score + ", classid=" + classid + "]";
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/multipledatasources3/src/main/java/com/mzd/multipledatasources/datasource/Datasource1.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.datasource;
2 |
3 | import org.springframework.boot.context.properties.ConfigurationProperties;
4 |
5 | /**
6 | * @ConfigurationProperties注解的作用:
7 | * 根据application.properties配置文件前缀为prefix值的属性映射成一个实体类
8 | * 只要prefix后面的名与实体对象的数据名一致就能自动注入进去
9 | * @Value
10 | * 读取配置文件中的单个参数赋值给一个变量
11 | * 这个变量可以和配置文件中的值不一样
12 | * 但是@Value("${参数值}")必须和配置文件中的参数值保持一致
13 | */
14 | @ConfigurationProperties(prefix = "spring.datasource.test1")
15 | public class Datasource1 {
16 | private String url;
17 | private String username;
18 | private String password;
19 |
20 | public String getUrl() {
21 | return url;
22 | }
23 |
24 | public void setUrl(String url) {
25 | this.url = url;
26 | }
27 |
28 | public String getUsername() {
29 | return username;
30 | }
31 |
32 | public void setUsername(String username) {
33 | this.username = username;
34 | }
35 |
36 | public String getPassword() {
37 | return password;
38 | }
39 |
40 | public void setPassword(String password) {
41 | this.password = password;
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/multipledatasources4/src/main/java/com/mzd/multipledatasources/controller/TransactionController.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.controller;
2 |
3 | import java.util.UUID;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.RequestMapping;
7 | import org.springframework.web.bind.annotation.RestController;
8 |
9 | import com.mzd.multipledatasources.bean.TeachersBean;
10 | import com.mzd.multipledatasources.bean.TestBean;
11 | import com.mzd.multipledatasources.dao.TransactionDao2;
12 | import com.mzd.multipledatasources.service.TransactionService1;
13 | import com.mzd.multipledatasources.service.TransactionService2;
14 |
15 | /**
16 | * 多数据源事务测试
17 | *
18 | * @author acer
19 | *
20 | */
21 | @RestController
22 | public class TransactionController {
23 | @Autowired
24 | private TransactionService1 ts1;
25 | @Autowired
26 | private TransactionService2 ts2;
27 |
28 | @RequestMapping("/savetest.do")
29 | public String savetest() {
30 | TestBean tb = new TestBean();
31 | tb.setId(UUID.randomUUID().toString().replaceAll("-", ""));
32 | tb.setScore(70);
33 | tb.setClassid("1");
34 | tb.setUserid("a");
35 | ts1.test01_saveTestBean(tb);
36 | return "success";
37 | }
38 |
39 | @RequestMapping("/saveteacher.do")
40 | public String saveteacher() {
41 | TeachersBean tb = new TeachersBean();
42 | tb.setId(UUID.randomUUID().toString().replaceAll("-", ""));
43 | tb.setTeachername("王老师");
44 | tb.setClassid("1");
45 | ts2.test02_saveTeachersBean(tb);
46 | return "success";
47 | }
48 |
49 |
50 | }
51 |
--------------------------------------------------------------------------------
/multipledatasources2/src/main/java/com/mzd/multipledatasources/datasource/DataSourceConfig2.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.datasource;
2 |
3 | import javax.sql.DataSource;
4 |
5 | import org.apache.ibatis.session.SqlSessionFactory;
6 | import org.mybatis.spring.SqlSessionFactoryBean;
7 | import org.mybatis.spring.SqlSessionTemplate;
8 | import org.mybatis.spring.annotation.MapperScan;
9 | import org.springframework.beans.factory.annotation.Qualifier;
10 | import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
11 | import org.springframework.boot.context.properties.ConfigurationProperties;
12 | import org.springframework.context.annotation.Bean;
13 | import org.springframework.context.annotation.Configuration;
14 | import org.springframework.context.annotation.Primary;
15 | import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
16 |
17 | @Configuration
18 | @MapperScan(basePackages = "com.mzd.multipledatasources.mapper.test02", sqlSessionFactoryRef = "test2SqlSessionFactory")
19 | public class DataSourceConfig2 {
20 | @Bean(name = "test2DataSource")
21 | @ConfigurationProperties(prefix = "spring.datasource.test2")
22 | public DataSource getDateSource2() {
23 | return DataSourceBuilder.create().build();
24 | }
25 | @Bean(name = "test2SqlSessionFactory")
26 | public SqlSessionFactory test2SqlSessionFactory(@Qualifier("test2DataSource") DataSource datasource)
27 | throws Exception {
28 | SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
29 | bean.setDataSource(datasource);
30 | bean.setMapperLocations(
31 | new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/test02/*.xml"));
32 | return bean.getObject();
33 | }
34 | @Bean("test2SqlSessionTemplate")
35 | public SqlSessionTemplate test2sqlsessiontemplate(
36 | @Qualifier("test2SqlSessionFactory") SqlSessionFactory sessionfactory) {
37 | return new SqlSessionTemplate(sessionfactory);
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/multipledatasources2/src/main/java/com/mzd/multipledatasources/service/TransactionService1.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.service;
2 |
3 | import java.util.UUID;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 | import org.springframework.transaction.annotation.Transactional;
8 |
9 | import com.mzd.multipledatasources.bean.TeachersBean;
10 | import com.mzd.multipledatasources.bean.TestBean;
11 | import com.mzd.multipledatasources.dao.test01.TransactionDao1;
12 | import com.mzd.multipledatasources.dao.test02.TransactionDao2;
13 |
14 | @Service
15 | public class TransactionService1 {
16 | @Autowired
17 | private TransactionDao1 ts1;
18 | @Autowired
19 | private TransactionService2 ts2;
20 | @Autowired
21 | private TransactionDao2 td2;
22 |
23 | @Transactional
24 | public void savetestBean(TestBean t) {
25 | ts1.save(t);
26 | }
27 |
28 | @Transactional
29 | public void savetestBean2(TestBean t) {
30 | TeachersBean tb = new TeachersBean();
31 | tb.setId(UUID.randomUUID().toString().replaceAll("-", ""));
32 | tb.setTeachername("王老师");
33 | tb.setClassid("1");
34 | ts2.saveTeacher(tb);
35 | int i = 1 / 0;
36 | ts1.save(t);
37 | }
38 |
39 | @Transactional
40 | public void savetestBean3(TestBean t) {
41 | TeachersBean tb = new TeachersBean();
42 | tb.setId(UUID.randomUUID().toString().replaceAll("-", ""));
43 | tb.setTeachername("王老师");
44 | tb.setClassid("1");
45 | ts2.saveTeacher2(tb);
46 | int i = 1 / 0;
47 | ts1.save(t);
48 | }
49 |
50 | @Transactional
51 | /**
52 | * 直接注入数据源2的dao层就不收这个事务控制了
53 | *
54 | * @param t
55 | */
56 | public void savetestBean4(TestBean t) {
57 | TeachersBean tb = new TeachersBean();
58 | tb.setId(UUID.randomUUID().toString().replaceAll("-", ""));
59 | tb.setTeachername("王老师");
60 | tb.setClassid("1");
61 | td2.save(tb);
62 | int i = 1 / 0;
63 | ts1.save(t);
64 | }
65 |
66 | }
67 |
--------------------------------------------------------------------------------
/multipledatasources3/src/main/java/com/mzd/multipledatasources/service/TransactionService1.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.service;
2 |
3 | import java.util.UUID;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 | import org.springframework.transaction.annotation.Transactional;
8 |
9 | import com.mzd.multipledatasources.bean.TeachersBean;
10 | import com.mzd.multipledatasources.bean.TestBean;
11 | import com.mzd.multipledatasources.dao.test01.TransactionDao1;
12 | import com.mzd.multipledatasources.dao.test02.TransactionDao2;
13 |
14 | @Service
15 | public class TransactionService1 {
16 | @Autowired
17 | private TransactionDao1 ts1;
18 | @Autowired
19 | private TransactionService2 ts2;
20 | @Autowired
21 | private TransactionDao2 td2;
22 |
23 | @Transactional
24 | public void savetestBean(TestBean t) {
25 | ts1.save(t);
26 | }
27 |
28 | @Transactional
29 | public void savetestBean2(TestBean t) {
30 | TeachersBean tb = new TeachersBean();
31 | tb.setId(UUID.randomUUID().toString().replaceAll("-", ""));
32 | tb.setTeachername("王老师");
33 | tb.setClassid("1");
34 | ts2.saveTeacher(tb);
35 | int i = 1 / 0;
36 | ts1.save(t);
37 | }
38 |
39 | @Transactional
40 | public void savetestBean3(TestBean t) {
41 | TeachersBean tb = new TeachersBean();
42 | tb.setId(UUID.randomUUID().toString().replaceAll("-", ""));
43 | tb.setTeachername("王老师");
44 | tb.setClassid("1");
45 | ts2.saveTeacher2(tb);
46 | int i = 1 / 0;
47 | ts1.save(t);
48 | }
49 |
50 | @Transactional
51 | /**
52 | * 直接注入数据源2的dao层就不收这个事务控制了
53 | *
54 | * @param t
55 | */
56 | public void savetestBean4(TestBean t) {
57 | TeachersBean tb = new TeachersBean();
58 | tb.setId(UUID.randomUUID().toString().replaceAll("-", ""));
59 | tb.setTeachername("王老师");
60 | tb.setClassid("1");
61 | td2.save(tb);
62 | int i = 1 / 0;
63 | ts1.save(t);
64 | }
65 |
66 | }
67 |
--------------------------------------------------------------------------------
/multipledatasources2/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.mzd
7 | multipledatasources2
8 | 0.0.1-SNAPSHOT
9 | jar
10 |
11 | multipledatasources2
12 | Demo project for Spring Boot
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.5.9.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | UTF-8
24 | 1.8
25 |
26 |
27 |
28 |
29 | org.springframework.boot
30 | spring-boot-starter-jdbc
31 |
32 |
33 | org.springframework.boot
34 | spring-boot-starter-web
35 |
36 |
37 | org.mybatis.spring.boot
38 | mybatis-spring-boot-starter
39 | 1.3.2
40 |
41 |
42 | mysql
43 | mysql-connector-java
44 | 8.0.11
45 |
46 |
47 | org.springframework.boot
48 | spring-boot-starter-test
49 | test
50 |
51 |
52 |
53 |
54 |
55 |
56 | org.springframework.boot
57 | spring-boot-maven-plugin
58 |
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/multipledatasources2/src/main/java/com/mzd/multipledatasources/datasource/DataSourceConfig1.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.datasource;
2 |
3 | import javax.sql.DataSource;
4 | import org.apache.ibatis.session.SqlSessionFactory;
5 | import org.mybatis.spring.SqlSessionFactoryBean;
6 | import org.mybatis.spring.SqlSessionTemplate;
7 | import org.mybatis.spring.annotation.MapperScan;
8 | import org.springframework.beans.factory.annotation.Qualifier;
9 | import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
10 | import org.springframework.boot.context.properties.ConfigurationProperties;
11 | import org.springframework.context.annotation.Bean;
12 | import org.springframework.context.annotation.Configuration;
13 | import org.springframework.context.annotation.Primary;
14 | import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
15 |
16 | //表示这个类为一个配置类
17 | @Configuration
18 | // 配置mybatis的接口类放的地方
19 | @MapperScan(basePackages = "com.mzd.multipledatasources.mapper.test01", sqlSessionFactoryRef = "test1SqlSessionFactory")
20 | public class DataSourceConfig1 {
21 | // 将这个对象放入Spring容器中
22 | @Bean(name = "test1DataSource")
23 | // 表示这个数据源是默认数据源
24 | @Primary
25 | // 读取application.properties中的配置参数映射成为一个对象
26 | // prefix表示参数的前缀
27 | @ConfigurationProperties(prefix = "spring.datasource.test1")
28 | public DataSource getDateSource1() {
29 | return DataSourceBuilder.create().build();
30 | }
31 |
32 | @Bean(name = "test1SqlSessionFactory")
33 | // 表示这个数据源是默认数据源
34 | @Primary
35 | // @Qualifier表示查找Spring容器中名字为test1DataSource的对象
36 | public SqlSessionFactory test1SqlSessionFactory(@Qualifier("test1DataSource") DataSource datasource)
37 | throws Exception {
38 | SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
39 | bean.setDataSource(datasource);
40 | bean.setMapperLocations(
41 | // 设置mybatis的xml所在位置
42 | new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/test01/*.xml"));
43 | return bean.getObject();
44 | }
45 |
46 | @Bean("test1SqlSessionTemplate")
47 | // 表示这个数据源是默认数据源
48 | @Primary
49 | public SqlSessionTemplate test1sqlsessiontemplate(
50 | @Qualifier("test1SqlSessionFactory") SqlSessionFactory sessionfactory) {
51 | return new SqlSessionTemplate(sessionfactory);
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/multipledatasources4/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.mzd
7 | multipledatasources4
8 | 0.0.1-SNAPSHOT
9 | jar
10 |
11 | multipledatasources4
12 | Demo project for Spring Boot
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.5.9.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | UTF-8
24 | 1.8
25 |
26 |
27 |
28 |
29 | org.springframework.boot
30 | spring-boot-starter-jdbc
31 |
32 |
33 | org.springframework.boot
34 | spring-boot-starter-web
35 |
36 |
37 |
38 |
39 | org.springframework.boot
40 | spring-boot-starter-aop
41 |
42 |
43 | org.mybatis.spring.boot
44 | mybatis-spring-boot-starter
45 | 1.3.2
46 |
47 |
48 | mysql
49 | mysql-connector-java
50 | 8.0.11
51 |
52 |
53 | org.springframework.boot
54 | spring-boot-starter-test
55 | test
56 |
57 |
58 |
59 |
60 |
61 |
62 | org.springframework.boot
63 | spring-boot-maven-plugin
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/multipledatasources3/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.mzd
7 | multipledatasources3
8 | 0.0.1-SNAPSHOT
9 | jar
10 |
11 | multipledatasources3
12 | Demo project for Spring Boot
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.5.9.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | UTF-8
24 | 1.8
25 |
26 |
27 |
28 |
29 | org.springframework.boot
30 | spring-boot-starter-jdbc
31 |
32 |
33 | org.springframework.boot
34 | spring-boot-starter-web
35 |
36 |
37 | org.mybatis.spring.boot
38 | mybatis-spring-boot-starter
39 | 1.3.2
40 |
41 |
42 |
43 | org.springframework.boot
44 | spring-boot-starter-jta-atomikos
45 |
46 |
47 | mysql
48 | mysql-connector-java
49 | 8.0.11
50 |
51 |
52 | org.springframework.boot
53 | spring-boot-starter-test
54 | test
55 |
56 |
57 |
58 |
59 |
60 |
61 | org.springframework.boot
62 | spring-boot-maven-plugin
63 |
64 |
65 |
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/multipledatasources3/src/main/java/com/mzd/multipledatasources/datasource/AtomikosDataSourceConfig1.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.datasource;
2 |
3 | import java.sql.SQLException;
4 |
5 | import javax.sql.DataSource;
6 |
7 | import org.apache.ibatis.session.SqlSessionFactory;
8 | import org.mybatis.spring.SqlSessionFactoryBean;
9 | import org.mybatis.spring.SqlSessionTemplate;
10 | import org.mybatis.spring.annotation.MapperScan;
11 | import org.springframework.beans.factory.annotation.Qualifier;
12 | import org.springframework.boot.jta.atomikos.AtomikosDataSourceBean;
13 | import org.springframework.context.annotation.Bean;
14 | import org.springframework.context.annotation.Configuration;
15 | import org.springframework.context.annotation.Primary;
16 | import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
17 |
18 | import com.mysql.cj.jdbc.MysqlXADataSource;
19 |
20 | @Configuration
21 | @MapperScan(basePackages = "com.mzd.multipledatasources.mapper.test01", sqlSessionTemplateRef = "test1SqlSessionTemplate")
22 | public class AtomikosDataSourceConfig1 {
23 |
24 | @Primary
25 | @Bean(name = "test1DataSource")
26 | public DataSource test1DataSource(Datasource1 ds) throws SQLException {
27 | MysqlXADataSource mysqlxadatasource = new MysqlXADataSource();
28 | mysqlxadatasource.setUrl(ds.getUrl());
29 | mysqlxadatasource.setPassword(ds.getPassword());
30 | mysqlxadatasource.setUser(ds.getUsername());
31 | mysqlxadatasource.setPinGlobalTxToPhysicalConnection(true);
32 | AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean();
33 | xaDataSource.setXaDataSource(mysqlxadatasource);
34 | xaDataSource.setUniqueResourceName("test1DataSource");
35 | return xaDataSource;
36 | }
37 |
38 | @Bean(name = "test1SqlSessionFactory")
39 | @Primary
40 | public SqlSessionFactory test1SqlSessionFactory(@Qualifier("test1DataSource") DataSource datasource)
41 | throws Exception {
42 | SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
43 | bean.setDataSource(datasource);
44 | bean.setMapperLocations(
45 | new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/test01/*.xml"));
46 | return bean.getObject();
47 | }
48 |
49 | @Bean("test1SqlSessionTemplate")
50 | @Primary
51 | public SqlSessionTemplate test1sqlsessiontemplate(
52 | @Qualifier("test1SqlSessionFactory") SqlSessionFactory sessionfactory) {
53 | return new SqlSessionTemplate(sessionfactory);
54 | }
55 |
56 | }
57 |
--------------------------------------------------------------------------------
/multipledatasources3/src/main/java/com/mzd/multipledatasources/datasource/AtomikosDataSourceConfig2.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.datasource;
2 |
3 | import java.sql.SQLException;
4 |
5 | import javax.sql.DataSource;
6 |
7 | import org.apache.ibatis.session.SqlSessionFactory;
8 | import org.mybatis.spring.SqlSessionFactoryBean;
9 | import org.mybatis.spring.SqlSessionTemplate;
10 | import org.mybatis.spring.annotation.MapperScan;
11 | import org.springframework.beans.factory.annotation.Qualifier;
12 | import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
13 | import org.springframework.boot.context.properties.ConfigurationProperties;
14 | import org.springframework.boot.jta.atomikos.AtomikosDataSourceBean;
15 | import org.springframework.context.annotation.Bean;
16 | import org.springframework.context.annotation.Configuration;
17 | import org.springframework.context.annotation.Primary;
18 | import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
19 |
20 | import com.mysql.cj.jdbc.MysqlXADataSource;
21 |
22 | @Configuration
23 | @MapperScan(basePackages = "com.mzd.multipledatasources.mapper.test02", sqlSessionTemplateRef = "test2SqlSessionTemplate")
24 | public class AtomikosDataSourceConfig2 {
25 |
26 |
27 | @Bean(name = "test2DataSource")
28 | public DataSource test1DataSource(Datasource2 ds) throws SQLException {
29 | MysqlXADataSource mysqlxadatasource = new MysqlXADataSource();
30 | mysqlxadatasource.setUrl(ds.getUrl());
31 | mysqlxadatasource.setPassword(ds.getPassword());
32 | mysqlxadatasource.setUser(ds.getUsername());
33 | mysqlxadatasource.setPinGlobalTxToPhysicalConnection(true);
34 | AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean();
35 | xaDataSource.setXaDataSource(mysqlxadatasource);
36 | xaDataSource.setUniqueResourceName("test2DataSource");
37 | return xaDataSource;
38 | }
39 |
40 | @Bean(name = "test2SqlSessionFactory")
41 | public SqlSessionFactory test2SqlSessionFactory(@Qualifier("test2DataSource") DataSource datasource)
42 | throws Exception {
43 | SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
44 | bean.setDataSource(datasource);
45 | bean.setMapperLocations(
46 | new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/test02/*.xml"));
47 | return bean.getObject();
48 | }
49 |
50 | @Bean("test2SqlSessionTemplate")
51 | public SqlSessionTemplate test2sqlsessiontemplate(
52 | @Qualifier("test2SqlSessionFactory") SqlSessionFactory sessionfactory) {
53 | return new SqlSessionTemplate(sessionfactory);
54 | }
55 |
56 | }
57 |
--------------------------------------------------------------------------------
/multipledatasources3/src/main/java/com/mzd/multipledatasources/controller/TransactionController.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.controller;
2 |
3 | import java.util.UUID;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.RequestMapping;
7 | import org.springframework.web.bind.annotation.RestController;
8 |
9 | import com.mzd.multipledatasources.bean.TeachersBean;
10 | import com.mzd.multipledatasources.bean.TestBean;
11 | import com.mzd.multipledatasources.dao.test02.TransactionDao2;
12 | import com.mzd.multipledatasources.service.TransactionService1;
13 | import com.mzd.multipledatasources.service.TransactionService2;
14 |
15 | /**
16 | * 多数据源事务测试 配置上jta-atomikos 之后事务变得正常 无论是test、test2还是test3,两个对象都是存不进去的
17 | *
18 | * @author acer
19 | *
20 | */
21 | @RestController
22 | public class TransactionController {
23 | @Autowired
24 | private TransactionService1 ts1;
25 | @Autowired
26 | private TransactionService2 ts2;
27 | @RequestMapping("/savetest.do")
28 | public String savetest() {
29 | TestBean tb = new TestBean();
30 | tb.setId(UUID.randomUUID().toString().replaceAll("-", ""));
31 | tb.setScore(70);
32 | tb.setClassid("1");
33 | tb.setUserid("a");
34 | ts1.savetestBean(tb);
35 | return "success";
36 | }
37 |
38 | @RequestMapping("/saveteacher.do")
39 | public String saveteacher() {
40 | TeachersBean tb = new TeachersBean();
41 | tb.setId(UUID.randomUUID().toString().replaceAll("-", ""));
42 | tb.setTeachername("王老师");
43 | tb.setClassid("1");
44 | ts2.saveTeacher(tb);
45 | return "success";
46 | }
47 |
48 | // ########################开始事务测试##########################
49 |
50 | @RequestMapping("/test.do")
51 | public String test() {
52 | TestBean tb = new TestBean();
53 | tb.setId(UUID.randomUUID().toString().replaceAll("-", ""));
54 | tb.setScore(70);
55 | tb.setClassid("1");
56 | tb.setUserid("a");
57 | ts1.savetestBean2(tb);
58 | return "success";
59 | }
60 |
61 | @RequestMapping("/test2.do")
62 | public String test2() {
63 | TestBean tb = new TestBean();
64 | tb.setId(UUID.randomUUID().toString().replaceAll("-", ""));
65 | tb.setScore(70);
66 | tb.setClassid("1");
67 | tb.setUserid("a");
68 | ts1.savetestBean3(tb);
69 | return "success";
70 | }
71 |
72 | @RequestMapping("/test3.do")
73 | public String test3() {
74 | TestBean tb = new TestBean();
75 | tb.setId(UUID.randomUUID().toString().replaceAll("-", ""));
76 | tb.setScore(70);
77 | tb.setClassid("1");
78 | tb.setUserid("a");
79 | ts1.savetestBean4(tb);
80 | return "success";
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/multipledatasources4/src/main/java/com/mzd/multipledatasources/datasource/DataSourceConfig.java:
--------------------------------------------------------------------------------
1 | package com.mzd.multipledatasources.datasource;
2 |
3 | import java.util.HashMap;
4 | import java.util.Map;
5 |
6 | import javax.sql.DataSource;
7 | import org.apache.ibatis.session.SqlSessionFactory;
8 | import org.mybatis.spring.SqlSessionFactoryBean;
9 | import org.mybatis.spring.SqlSessionTemplate;
10 | import org.mybatis.spring.annotation.MapperScan;
11 | import org.springframework.beans.factory.annotation.Qualifier;
12 | import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
13 | import org.springframework.boot.context.properties.ConfigurationProperties;
14 | import org.springframework.context.annotation.Bean;
15 | import org.springframework.context.annotation.Configuration;
16 | import org.springframework.context.annotation.Primary;
17 | import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
18 |
19 | @Configuration
20 | @MapperScan(basePackages = "com.mzd.multipledatasources.mapper", sqlSessionFactoryRef = "SqlSessionFactory")
21 | public class DataSourceConfig {
22 | @Primary
23 | @Bean(name = "test1DataSource")
24 | @ConfigurationProperties(prefix = "spring.datasource.test1")
25 | public DataSource getDateSource1() {
26 | return DataSourceBuilder.create().build();
27 | }
28 |
29 | @Bean(name = "test2DataSource")
30 | @ConfigurationProperties(prefix = "spring.datasource.test2")
31 | public DataSource getDateSource2() {
32 | return DataSourceBuilder.create().build();
33 | }
34 |
35 | @Bean(name = "dynamicDataSource")
36 | public DynamicDataSource DataSource(@Qualifier("test1DataSource") DataSource test1DataSource,
37 | @Qualifier("test2DataSource") DataSource test2DataSource) {
38 | Map