5分鐘學會springboot整合多數據源

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、數據庫結果 - 以下圖所示 :

                      

相關文章
相關標籤/搜索