1.导入pom依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.22</version>
</dependency>
2.application.yml配置多数据源连接信息
spring:
  datasource:
    one:
      type: com.alibaba.druid.pool.DruidDataSource
      url: jdbc:mysql://localhost:3306/jdbc
      username: root
      password: root
    two:
      type: com.alibaba.druid.pool.DruidDataSource
      url: jdbc:mysql://localhost:3306/jdbc2
      username: root
      password: root
    druid:
      max-wait: 60000
      #在每次连接的时候判断一些连接是否有效
      test-on-borrow: true
      test-while-idle: true
3.配置多个数据源实例Bean

由于我们配置了多数据源,springboot提供的自动化配置也就失效,需要我们手动配置。

@Configuration
public class DataSourceConfig {

    @ConfigurationProperties(prefix = "spring.datasource.one")
    @Bean(name = "dsOne")
    public DataSource dsOne(){
        return DruidDataSourceBuilder.create().build();
    }

    @ConfigurationProperties(prefix = "spring.datasource.two")
    @Bean(name = "dsTwo")
    public DataSource dsTwo(){
        return DruidDataSourceBuilder.create().build();
    }

}

注:@Qualifier :告诉是使用哪个数据源

​ @ConfigurationProperties :加载application.properties中的哪个数据源

​ @Primary:自动装配时若出现多个Bean候选者时,被该注解修饰的bean将被作为首选者,否则会被抛出异常

4.配置多个JdbcTemplate实例Bean
@Configuration
public class JdbcTemplateConfig {

    @Bean
    public JdbcTemplate jdbcTemplateOne(@Qualifier("dsOne")DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }

    @Bean
    public JdbcTemplate jdbcTemplateTwo(@Qualifier("dsTwo")DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }

}
5.简单测试
@RestController
public class JdbcDsController {

    @Resource(name = "jdbcTemplateOne")
    private JdbcTemplate jdbcTemplateOne;

    @Autowired
    @Qualifier("jdbcTemplateTwo")
    private JdbcTemplate jdbcTemplateTwo;

    @GetMapping("/test1")
    public void test1(){
        List<Book> books1 = jdbcTemplateOne.query("select * from t_book", new BeanPropertyRowMapper<>(Book.class));
        List<Book> books2 = jdbcTemplateTwo.query("select * from t_book", new BeanPropertyRowMapper<>(Book.class));
        System.out.println(books1);
        System.out.println(books2);
    }

}

参考:

SpringBoot整合JdbcTemplate多数据源—使用druid 连接池

Spring Boot之JdbcTemplate多数据源配置与使用—使用默认HikariPool

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐