Spring Bootで複数のデータソースに接続する方法を教えてください。

Spring Bootで複数のデータソースに接続するには、Springフレームワークで提供されているマルチデータソースサポートを使用します。次に例を示します。

  1. application.properties(またはapplication.yml)で以下のように、複数のデータソースへの接続情報を設定します。
# 数据源1
spring.datasource.url=jdbc:mysql://localhost:3306/db1
spring.datasource.username=root
spring.datasource.password=123456

# 数据源2
datasource2.url=jdbc:mysql://localhost:3306/db2
datasource2.username=root
datasource2.password=123456
  1. 複数のデータソースの設定クラスを作成します。複数の設定クラスをそれぞれ異なるデータソースに設定するために使用します。例:
@Configuration
public class DataSource1Config {
    
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource1() {
        return DataSourceBuilder.create().build();
    }
}

@Configuration
public class DataSource2Config {
    
    @Bean
    @ConfigurationProperties(prefix = "datasource2")
    public DataSource dataSource2() {
        return DataSourceBuilder.create().build();
    }
}
  1. 複数のデータソースに対応したJdbcTemplateインスタンスを作成します。データソースが必要な箇所では、@Autowiredアノテーションで対応するデータソースを注入し、JdbcTemplateインスタンスを作成します。例:
@RestController
public class UserController {
    
    @Autowired
    private DataSource dataSource1;
    
    @Autowired
    private DataSource dataSource2;
    
    @Bean
    public JdbcTemplate jdbcTemplate1() {
        return new JdbcTemplate(dataSource1);
    }
    
    @Bean
    public JdbcTemplate jdbcTemplate2() {
        return new JdbcTemplate(dataSource2);
    }
    
    @GetMapping("/users")
    public List<User> getUsers() {
        // 使用jdbcTemplate1查询数据源1的用户数据
        List<User> users1 = jdbcTemplate1().query("SELECT * FROM users", new BeanPropertyRowMapper<>(User.class));
        
        // 使用jdbcTemplate2查询数据源2的用户数据
        List<User> users2 = jdbcTemplate2().query("SELECT * FROM users", new BeanPropertyRowMapper<>(User.class));
        
        // 合并两个数据源的用户数据
        List<User> allUsers = new ArrayList<>();
        allUsers.addAll(users1);
        allUsers.addAll(users2);
        
        return allUsers;
    }
}

これにより、複数のデータソースを使用して、異なるデータベースに接続することができます。 データソースを使用する必要がある場所では、具体的なニーズに応じて対応するデータソースを選択して操作することができます。

bannerAds