螺竹编程
发布于 2024-06-01 / 3 阅读
0

SpringBoot数据/JDBC:Spring Boot与JDBC多数据源

介绍

在Spring Boot中,如果你需要使用多个数据源(例如连接到不同的数据库),你可以通过配置多个JdbcTemplate实例来实现。

Spring Boot与JdbcTemplate多数据源的整合

下面是Spring Boot与JdbcTemplate多数据源的整合步骤:

  1. 添加依赖:在你的Spring Boot项目的pom.xml文件中添加JdbcTemplate的依赖,如之前所述。

  2. 配置数据源:在application.properties(或application.yml)文件中配置多个数据源的连接信息。你可以为每个数据源指定不同的前缀,例如:

    # 第一个数据源
    spring.datasource.datasource1.url=jdbc:mysql://localhost:3306/database1
    spring.datasource.datasource1.username=username1
    spring.datasource.datasource1.password=password1
    spring.datasource.datasource1.driver-class-name=com.mysql.jdbc.Driver
    
    # 第二个数据源
    spring.datasource.datasource2.url=jdbc:mysql://localhost:3306/database2
    spring.datasource.datasource2.username=username2
    spring.datasource.datasource2.password=password2
    spring.datasource.datasource2.driver-class-name=com.mysql.jdbc.Driver
    
  3. 创建数据源和JdbcTemplate Bean:在Spring Boot的配置类中创建多个数据源和对应的JdbcTemplate Bean。你可以使用@Configuration注解和@Bean注解分别创建数据源和JdbcTemplate Bean,并分别给它们命名。

    @Configuration
    public class DatabaseConfig {
    
        @Primary
        @Bean(name = "dataSource1")
        @ConfigurationProperties(prefix = "spring.datasource.datasource1")
        public DataSource dataSource1() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "jdbcTemplate1")
        public JdbcTemplate jdbcTemplate1(@Qualifier("dataSource1") DataSource dataSource1) {
            return new JdbcTemplate(dataSource1);
        }
    
        @Bean(name = "dataSource2")
        @ConfigurationProperties(prefix = "spring.datasource.datasource2")
        public DataSource dataSource2() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "jdbcTemplate2")
        public JdbcTemplate jdbcTemplate2(@Qualifier("dataSource2") DataSource dataSource2) {
            return new JdbcTemplate(dataSource2);
        }
    }
    

    在上面的示例中,我们创建了两个数据源(dataSource1dataSource2)以及对应的JdbcTemplate实例(jdbcTemplate1jdbcTemplate2)。@Primary注解用于指定默认的数据源。

  4. 使用JdbcTemplate:在需要使用JdbcTemplate的地方注入对应的JdbcTemplate实例,并使用其提供的方法执行数据库操作。

    @Autowired
    @Qualifier("jdbcTemplate1")
    private JdbcTemplate jdbcTemplate1;
    
    @Autowired
    @Qualifier("jdbcTemplate2")
    private JdbcTemplate jdbcTemplate2;
    
    public void fetchUsers() {
        List<Map<String, Object>> userList1 = jdbcTemplate1.queryForList("SELECT * FROM users");
        for (Map<String, Object> user : userList1) {
            System.out.println("User from dataSource1: " + user.get("username"));
        }
    
        List<Map<String, Object>> userList2 = jdbcTemplate2.queryForList("SELECT * FROM users");
        for (Map<String, Object> user : userList2) {
            System.out.println("User from dataSource2: " + user.get("username"));
        }
    }