SpringBoot - 数据库操作之 JdbcTemplate 多数据源配置

所谓多数据源,就是一个Java EE项目中采用了不同数据库实例中的多个库,或者同一个数据库实例中多个不同的库。比如实现数据库读写分离、分库分表、备份等操作。JdbcTemplate多数据源的配置是比较简单的,因为一个JdbcTemplate对应一个DataSource,开发者只需要手动提供多个DataSource,再手动配置JdbcTemplate即可。

1、添加依赖

具体依赖的添加请参考上一章的介绍。

2、创建两个数据库

3、在 application.properties 中配置多数据源

# 第一个数据源 first
spring.datasource.first.username=root
spring.datasource.first.password=root
spring.datasource.first.jdbcUrl=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.first.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.first.driverClassName=com.mysql.cj.jdbc.Driver

# 第二个数据源 second
spring.datasource.second.username=root
spring.datasource.second.password=root
spring.datasource.second.jdbcUrl=jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.second.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.second.driverClassName=com.mysql.cj.jdbc.Driver

4、数据源配置

@Configuration
public class DatasourceConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.first")
    public DataSource firstDataSource(){
       return  new HikariDataSource();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.second")
    public DataSource secondDataSource(){
        return  new HikariDataSource();
    }
}

5、配置 JdbcTemplate

(1)从前文的样例可以知道,项目只要引入了 spring-jdbc 依赖,如果开发者没有提供 JdbcTemplate 实例时,Spring Boot 默认会提供一个 JdbcTemplate 实例。
(2)如果配置多数据源时,由开发者自己提供 JdbcTemplate 实例,代码如下:

@Configuration
public class JdbcTemplateConfig {

    @Bean
    public JdbcTemplate firstJdbcTemplate(@Qualifier("firstDataSource")DataSource dataSource){

        return new JdbcTemplate(dataSource);
    }

    @Bean
    public JdbcTemplate secondJdbcTemplate(@Qualifier("secondDataSource")DataSource dataSource){

        return new JdbcTemplate(dataSource);
    }
}

6、创建实体

public class User {

    private Integer id;

    private String name;

    private String address;

    // 省略 getter 和 setter 方法
}


public class Book {
 
    private Integer id;
 
    private String name;
 
    private String author;
 
 
    // 省略 getter 和 setter 方法
}

7、创建 Controller

  为方便演示,这里不再添加 Dao 层和 Service 层,而是直接将两个 JdbcTemplate 注入到了 Controller 中,然后分别查询两个数据库中的数据。


@RestController
public class TowDataSourceController {

    @Resource(name = "firstJdbcTemplate")
    private JdbcTemplate first;

    @Resource(name = "secondJdbcTemplate")
    private JdbcTemplate second;

    @PostMapping("/testSave")
    public String test(){


        first.update("insert into `book`(`name`, `author`) values(?, ?)",
                "金瓶梅", "兰陵笑笑生");

        second.update("insert into `user`(`name`, `address`) values(?, ?)",
                "兰陵笑笑生", "清朝");

        return "保存成功";
    }
}

8、重启测试

猜你喜欢

转载自blog.csdn.net/small_love/article/details/111822955
今日推荐