springboot多数据源

一、配置数据源application.yml

spring:
  datasource:
    one:
      username: root
      password: root123
      jdbc-url: jdbc:oracle:thin:@//localhost:1521/orcl
      driver-class-name: oracle.jdbc.driver.OracleDriver
    two:
      username: root
      password: root123
      jdbc-url: jdbc:oracle:thin:@//localhost:1521/orcl_test
      driver-class-name: oracle.jdbc.driver.OracleDriver

注意:  多数据源的时候,url字段需要写成  jdbc-url

二、配置DataSourceConfig 和 JdbcTemplateConfig

因为使用了两种数据源并区分命名,所以SpringBoot无法自动加载,需要手动去配置加载DataSource,创建DataSourceConfig类:

@Configuration
public class DataSourceConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.one")
    public DataSource dsOne(){
        return DataSourceBuilder.create().build();
    }

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

配置之后,我们就有了两个不同的DataSource,再用这两个不同的DataSource去创建两个不同的JdbcTemplate。

创建JdbcTemplateConfig类,用来提供两个不同的JdbcTemplate实例:

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

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

}

每一个JdbcTemplate的创建都需要一个DataSource,由于Spring容器中现在存在两个DataSource,加上@Qualifier注解,表示按照名称查找。这里创建了两个JdbcTemplate实例,分别对应了两个DataSource,然后就可以直接使用JdbcTemplate

三、测试使用

在@RestController中注入两个不同的JdbcTemplate,这两个JdbcTemplate分别对应了不同的数据源:

@RestController
public class helloworld {

    @Autowired
    @Qualifier("jdbcTemplateOne")
    JdbcTemplate jdbcTemplateOne;

    @Resource(name = "jdbcTemplateTwo")
    JdbcTemplate jdbcTemplateTwo;

    @RequestMapping("/one")
    public List<Map<String,Object>> userList(){
        String sql = "select * from book";
        List<Map<String,Object>> list_maps = jdbcTemplateOne.queryForList(sql);
        return list_maps;
    }
    @RequestMapping("/two")
    public List<Map<String,Object>> userLista(){
        String sql = "select * from book";
        List<Map<String,Object>> list_maps = jdbcTemplateTwo.queryForList(sql);
        return list_maps;
    }
}

和DataSource一样,Spring容器中的JdbcTemplate也是有两个,因此不能通过byType的方式注入进来,这里给大伙提供了两种注入思路,一种是使用@Resource注解,直接通过byName的方式注入进来,另外一种就是 @Autowired 注解加上 @Qualifier 注解,两者联合起来,实际上也是byName。将JdbcTemplate注入进来之后,jdbcTemplateOne和jdbcTemplateTwo此时就代表操作不同的数据源,使用不同的JdbcTemplate操作不同的数据源,实现了多数据源配置。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值