介绍
在Spring Boot中,如果你需要使用多个数据源(例如连接到不同的数据库),你可以通过配置多个JdbcTemplate实例来实现。
Spring Boot与JdbcTemplate多数据源的整合
下面是Spring Boot与JdbcTemplate多数据源的整合步骤:
添加依赖:在你的Spring Boot项目的
pom.xml
文件中添加JdbcTemplate的依赖,如之前所述。配置数据源:在
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
创建数据源和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); } }
在上面的示例中,我们创建了两个数据源(
dataSource1
和dataSource2
)以及对应的JdbcTemplate实例(jdbcTemplate1
和jdbcTemplate2
)。@Primary
注解用于指定默认的数据源。使用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")); } }