1、前言java
springboot整合多數據源 (採用分包策略)。在此記錄下,分享給你們。mysql
2、springboot整合多數據源web
一、pom文件 依賴引入spring
<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 驅動 --> <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>
二、 application.yml 新增配置sql
spring: datasource: ## 用戶數據庫 user: jdbc-url: jdbc:mysql://127.0.0.1:3306/yys_user username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver ## 訂單數據庫 order: jdbc-url: jdbc:mysql://127.0.0.1:3306/yys_order username: root password: 123456. driver-class-name: com.mysql.jdbc.Driver
三、userDataSourceConfig.java - com.yys.config.user數據庫
/** * 用戶數據源 * Config * @author yys */ @Configuration @MapperScan(basePackages = "com.yys.user", sqlSessionTemplateRef = "userSqlSessionTemplate") public class UserDataSourceConfig { /** * 建立 DataSource * @return */ @Bean("userDataSource") @ConfigurationProperties("spring.datasource.user") public DataSource userDataSource() { return DataSourceBuilder.create().build(); } /** * 建立 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(); } /** * 建立 事務管理器 * @param dataSource * @return */ @Bean("userTransactionManager") public DataSourceTransactionManager userTransactionManager(@Qualifier("userDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } /** * 建立用戶 SqlSession模板 * @param sqlSessionFactory * @return */ @Bean("userSqlSessionTemplate") public SqlSessionTemplate userSqlSessionTemplate(@Qualifier("userSqlSessionFactory") SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } }
四、orderDataSourceConfig.java - com.yys.config.orderspringboot
/** * 訂單數據源 * Config * @author yys */ @Configuration @MapperScan(basePackages = "com.yys.order", sqlSessionTemplateRef = "orderSqlSessionTemplate") public class OrderDataSourceConfig { /** * 建立 DataSource * @return */ @Bean("orderDataSource") @ConfigurationProperties("spring.datasource.order") public DataSource orderDataSource() { return DataSourceBuilder.create().build(); } /** * 建立 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(); } /** * 建立 事務管理器 * @param dataSource * @return */ @Bean("orderTransactionManager") public DataSourceTransactionManager orderTransactionManager(@Qualifier("orderDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } /** * 建立訂單 SqlSession模板 * @param sqlSessionFactory * @return */ @Bean("orderSqlSessionTemplate") public SqlSessionTemplate orderSqlSessionTemplate(@Qualifier("orderSqlSessionFactory") SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } }
五、MybatisController.javamybatis
/** * 多數據源測試 * 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"; } }
六、UserMapper.javaapp
/** * 用戶管理 * 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); }
七、OrderMapper.javaspring-boot
/** * 訂單管理 * Mapper * @author yys */ public interface OrderMapper { // order爲數據庫關鍵字,記得使用`` @Insert("INSERT INTO `order` VALUES (NULL, #{amount}, #{address}, 1, NOW(), NOW())") int addOrder(@Param("amount") Double amount, @Param("address") String address); }
八、啓動類
@SpringBootApplication @MapperScan("com.yys.mapper") public class YysApp { public static void main(String[] args) { SpringApplication.run(YysApp.class, args); } }
九、初始化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 '狀態:-1-刪除;1-正常;', `create_time` datetime NOT NULL COMMENT '建立時間', `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 '狀態:-1-刪除;1-正常;', `create_time` datetime NOT NULL COMMENT '建立時間', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
十、測試
http://localhost:8080/add/user?name=洞人&age=18
a、頁面結果 - 以下圖所示 :
b、數據庫結果 - 以下圖所示 :
http://localhost:8080/add/order?amount=10.24&address=山頂
a、頁面結果 - 以下圖所示 :
b、數據庫結果 - 以下圖所示 :