一、前言
springboot整合多數(shù)據(jù)源 (采用分包策略)票腰。
在此記錄下,分享給大家女气。
二杏慰、springboot整合多數(shù)據(jù)源
1、pom文件 依賴引入
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath />
</parent>
<dependencies>
<!-- SpringBoot 測試 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- mybatis 支持 SpringBoot -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!-- mysql 驅(qū)動 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- SpringBoot web組件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2、 application.yml 新增配置
spring:
datasource:
## 用戶數(shù)據(jù)庫
user:
jdbc-url: jdbc:mysql://127.0.0.1:3306/yys_user
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
## 訂單數(shù)據(jù)庫
order:
jdbc-url: jdbc:mysql://127.0.0.1:3306/yys_order
username: root
password: 123456.
driver-class-name: com.mysql.jdbc.Driver
3缘滥、userDataSourceConfig.java
/**
* 用戶數(shù)據(jù)源
* Config
* @author yys
*/
@Configuration
@MapperScan(basePackages = "com.yys.user", sqlSessionTemplateRef = "userSqlSessionTemplate")
public class UserDataSourceConfig {
/**
* 創(chuàng)建 DataSource
* @return
*/
@Bean("userDataSource")
@ConfigurationProperties("spring.datasource.user")
public DataSource userDataSource() {
return DataSourceBuilder.create().build();
}
/**
* 創(chuàng)建 SQL會話工廠
* @param dataSource
* @return
* @throws Exception
*/
@Bean("userSqlSessionFactory")
public SqlSessionFactory userSqlSessionFactory(@Qualifier("userDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean.getObject();
}
/**
* 創(chuàng)建 事務(wù)管理器
* @param dataSource
* @return
*/
@Bean("userTransactionManager")
public DataSourceTransactionManager userTransactionManager(@Qualifier("userDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
/**
* 創(chuàng)建用戶 SqlSession模板
* @param sqlSessionFactory
* @return
*/
@Bean("userSqlSessionTemplate")
public SqlSessionTemplate userSqlSessionTemplate(@Qualifier("userSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
4轰胁、orderDataSourceConfig.java
/**
* 訂單數(shù)據(jù)源
* Config
* @author yys
*/
@Configuration
@MapperScan(basePackages = "com.yys.order", sqlSessionTemplateRef = "orderSqlSessionTemplate")
public class OrderDataSourceConfig {
/**
* 創(chuàng)建 DataSource
* @return
*/
@Bean("orderDataSource")
@ConfigurationProperties("spring.datasource.order")
public DataSource orderDataSource() {
return DataSourceBuilder.create().build();
}
/**
* 創(chuàng)建 SQL會話工廠
* @param dataSource
* @return
* @throws Exception
*/
@Bean("orderSqlSessionFactory")
public SqlSessionFactory orderSqlSessionFactory(@Qualifier("orderDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean.getObject();
}
/**
* 創(chuàng)建 事務(wù)管理器
* @param dataSource
* @return
*/
@Bean("orderTransactionManager")
public DataSourceTransactionManager orderTransactionManager(@Qualifier("orderDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
/**
* 創(chuàng)建訂單 SqlSession模板
* @param sqlSessionFactory
* @return
*/
@Bean("orderSqlSessionTemplate")
public SqlSessionTemplate orderSqlSessionTemplate(@Qualifier("orderSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
5、MybatisController.java
/**
* 多數(shù)據(jù)源測試
* Controller
* @author yys
*/
@RestController
@RequestMapping("/add")
public class MybatisController {
@Autowired
private UserMapper userMapper;
@Autowired
private OrderMapper orderMapper;
/**
* 新增用戶
* @return
*/
@RequestMapping("/user")
public String addUser(String name, Integer age) {
return userMapper.addUser(name, age) > 0 ? "addUser success" : "addUser fail";
}
/**
* 新增訂單
* @return
*/
@RequestMapping("/order")
public String addOrder(Double amount, String address) {
return orderMapper.addOrder(amount, address) > 0 ? "addOrder success" : "addOrder fail";
}
}
6朝扼、UserMapper.java
/**
* 用戶管理
* Mapper
* @author yys
*/
public interface UserMapper {
@Insert("INSERT INTO user VALUES (NULL, #{name}, #{age}, 1, NOW(), NOW())")
int addUser(@Param("name") String name, @Param("age") Integer age);
}
7赃阀、OrderMapper.java
/**
* 訂單管理
* Mapper
* @author yys
*/
public interface OrderMapper {
// order為數(shù)據(jù)庫關(guān)鍵字,記得使用``
@Insert("INSERT INTO `order` VALUES (NULL, #{amount}, #{address}, 1, NOW(), NOW())")
int addOrder(@Param("amount") Double amount, @Param("address") String address);
}
8擎颖、啟動類
@SpringBootApplication
@MapperScan("com.yys.mapper")
public class YysApp {
public static void main(String[] args) {
SpringApplication.run(YysApp.class, args);
}
}
9榛斯、初始化sql文件
-- Database:yys_user
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT 'ID,自增列',
`name` varchar(32) NOT NULL COMMENT '用戶名',
`age` int(11) NOT NULL COMMENT '用戶年齡',
`status` tinyint(2) NOT NULL DEFAULT '1' COMMENT '狀態(tài):-1-刪除搂捧;1-正常驮俗;',
`create_time` datetime NOT NULL COMMENT '創(chuàng)建時間',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
-- Database:yys_order
DROP TABLE IF EXISTS `order`;
CREATE TABLE `order` (
`id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT 'ID,自增列',
`amount` double(11,2) NOT NULL COMMENT '訂單金額',
`address` varchar(32) NOT NULL COMMENT '地址',
`status` tinyint(2) NOT NULL DEFAULT '1' COMMENT '狀態(tài):-1-刪除允跑;1-正常王凑;',
`create_time` datetime NOT NULL COMMENT '創(chuàng)建時間',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
10、測試
http://localhost:8080/add/user?name=洞人&age=18
a聋丝、頁面結(jié)果 - 如下圖所示 :
b索烹、數(shù)據(jù)庫結(jié)果 - 如下圖所示 :
http://localhost:8080/add/order?amount=10.24&address=山頂
a、頁面結(jié)果 - 如下圖所示 :
b弱睦、數(shù)據(jù)庫結(jié)果 - 如下圖所示 :