SpringBoot 使用JdbcTemplate操作数据库2:多数据源

原创
2021/04/20 22:27
阅读数 87

多数据源是一个 Java EE 项目中采用了不同数据库实例中的多个库,或者同一个数据库实例中多个不同的库。

 

一、准备数据库

数据库1:XianRenDB

数据库2:XianRenDB2

 

二、添加依赖、配置

1、首先编辑 pom.xml 文件,添加相关依赖。

<!-- spring-jdbc -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
 
<!-- 数据库驱动依赖 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
 
<!-- 数据库连接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.9</version>
</dependency>

注意:这里不要引入 Mybatis 的 Jar 包,Mybatis 有自动装配的数据源,需要排除。

2、编写配置

# 数据源1
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.one.url=jdbc:mysql://localhost:3306/XianRenDB?useUnicode=swater&characterEncoding=UTF-8
spring.datasource.one.username=root
spring.datasource.one.password=root

# 数据源2
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.two.url=jdbc:mysql://localhost:3306/XianRenDB2?useUnicode=swater&characterEncoding=UTF-8
spring.datasource.two.username=root
spring.datasource.two.password=root

 

三、编写配置类

1、配置数据源

创建 DataSourceConfig 配置数据源,根据 application.properties 中的配置生成两个数据源:dsOne 和 dsTwo 作为 Bean 的名字加入到 Bean 容器里面。通过@ConfigurationProperties 注解配置文件来创建不同的 DataSource 对象。 

@Configuration
public class DataSourceConfig {

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

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

}

2、配置 JdbcTemplate

创建 JdbcTemplate 两个不同的实例,配置不同的数据源。通过 @Qualifier 注解注入不同的数据源。

@Configuration
public class JdbcTemplateConfig {

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

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

}

 

四、编写代码

1、创建实体类

@Data
@Accessors(chain = true)
public class Demo {

    private Integer id;

    private String name;

    private Integer num;

    private Date createTime;

}

2、编写Controller

@RestController
@RequestMapping("/demo")
public class DemoController {

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

    @RequestMapping("")
    public void test(){
        List<Demo> demo1 = jdbcTemplateOne.query("SELECT * FROM t_demo", new BeanPropertyRowMapper<>(Demo.class));
        List<Demo> demo2 = jdbcTemplateTwo.query("SELECT * FROM t_demo", new BeanPropertyRowMapper<>(Demo.class));
        System.out.println("数据库1:" + demo1);
        System.out.println("数据库2:" + demo2);
    }

}

如果想使用 @Autowired 注入需要配合  @Qualifier() 使用,例子如下:

@RestController
@RequestMapping("/demo")
public class DemoController {

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

}

 

五、验证结果

我们请求接口:http://127.0.0.1:8086/demo

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部