在當(dāng)今的信息化社會(huì),互聯(lián)網(wǎng)技術(shù)的快速發(fā)展使得各個(gè)行業(yè)都在尋求更高效、更便捷的方式來(lái)處理大量的數(shù)據(jù)。在這種情況下,數(shù)據(jù)庫(kù)技術(shù)應(yīng)運(yùn)而生,為各行各業(yè)的數(shù)據(jù)存儲(chǔ)和管理提供了強(qiáng)大的支持。Spring Boot作為一款優(yōu)秀的Java開(kāi)發(fā)框架,其內(nèi)置的數(shù)據(jù)庫(kù)連接和操作功能為我們提供了極大的便利。本文將詳細(xì)介紹如何在Spring Boot中連接和操作多個(gè)數(shù)據(jù)庫(kù),幫助大家更好地利用這一工具解決實(shí)際問(wèn)題。
1. 添加數(shù)據(jù)庫(kù)依賴
在連接和操作多個(gè)數(shù)據(jù)庫(kù)之前,首先需要在項(xiàng)目的pom.xml文件中添加對(duì)相應(yīng)數(shù)據(jù)庫(kù)的依賴。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>oracle</groupId>
<artifactId>ojdbc8</artifactId>
</dependency>2. 配置數(shù)據(jù)源
在Spring Boot中,我們可以通過(guò)配置文件來(lái)定義多個(gè)數(shù)據(jù)源。在application.properties或者application.yml文件中,分別為每個(gè)數(shù)據(jù)源配置相關(guān)屬性。
# 數(shù)據(jù)源1
spring.datasource.url=jdbc:mysql://localhost:3306/db1
spring.datasource.username=user1
spring.datasource.password=pass1
# 數(shù)據(jù)源2
spring.datasource.db2.url=jdbc:oracle:thin:@localhost:1521:db2
spring.datasource.db2.username=user2
spring.datasource.db2.password=pass23. 創(chuàng)建數(shù)據(jù)源和JdbcTemplate
在Spring Boot中,可以為每個(gè)數(shù)據(jù)源創(chuàng)建獨(dú)立的數(shù)據(jù)源對(duì)象和JdbcTemplate對(duì)象。
@Configuration
public class DataSourceConfig {
@Autowired
private Environment env;
@Primary
@Bean(name = "dataSource1")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource1() {
return DataSourceBuilder.create().build();
}
@Bean(name = "jdbcTemplate1")
public JdbcTemplate jdbcTemplate1(
@Qualifier("dataSource1")
DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name = "dataSource2")
@ConfigurationProperties(prefix = "spring.datasource.db2")
public DataSource dataSource2() {
return DataSourceBuilder.create().build();
}
@Bean(name = "jdbcTemplate2")
public JdbcTemplate jdbcTemplate2(
@Qualifier("dataSource2")
DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}4. 使用多個(gè)數(shù)據(jù)源
在需要使用特定數(shù)據(jù)源的地方,可以使用@Qualifier注解來(lái)指定要使用的JdbcTemplate。
@Autowired
@Qualifier("jdbcTemplate1")
private JdbcTemplate jdbcTemplate1;
@Autowired
@Qualifier("jdbcTemplate2")
private JdbcTemplate jdbcTemplate2;
public void method(){
String sql1="SELECT * FROM table1";
List<Map<String, Object>>result1=jdbcTemplate1.queryForList(sql1);
String sql2="SELECT * FROM table2";
List<Map<String, Object>>result2=jdbcTemplate2.queryForList(sql2);
}5. 多數(shù)據(jù)庫(kù)事務(wù)管理
如果需要在多個(gè)數(shù)據(jù)庫(kù)上執(zhí)行事務(wù)操作,可以使用Spring Boot的事務(wù)管理器。
@Configuration
@EnableTransactionManagement
public class TransactionConfig {
@Autowired
@Qualifier("dataSource1")
private DataSource dataSource1;
@Autowired
@Qualifier("dataSource2")
private DataSource dataSource2;
@Primary
@Bean(name = "transactionManager1")
public DataSourceTransactionManager transactionManager1() {
return new DataSourceTransactionManager(dataSource1);
}
@Bean(name = "transactionManager2")
public DataSourceTransactionManager transactionManager2() {
return new DataSourceTransactionManager(dataSource2);
}
@Primary
@Bean(name = "transactionTemplate1")
public TransactionTemplate transactionTemplate1(@Qualifier("transactionManager1") PlatformTransactionManager transactionManager) {
return new TransactionTemplate(transactionManager);
}
@Bean(name = "transactionTemplate2")
public TransactionTemplate transactionTemplate2(@Qualifier("transactionManager2") PlatformTransactionManager transactionManager) {
return new TransactionTemplate(transactionManager);
}
}6. 多數(shù)據(jù)源配置示例
以下是一個(gè)示例,演示了如何在Spring Boot中連接和操作多個(gè)數(shù)據(jù)庫(kù)。
@RestController
public class UserController {
@Autowired
@Qualifier("jdbcTemplate1")
private JdbcTemplate jdbcTemplate1;
@Autowired
@Qualifier("jdbcTemplate2")
private JdbcTemplate jdbcTemplate2;
@GetMapping("/users/db1")
public List<Map<String, Object>> getUsersFromDB1() {
String sql = "SELECT * FROM users";
return jdbcTemplate1.queryForList(sql);
}
@GetMapping("/users/db2")
public List<Map<String, Object>> getUsersFromDB2() {
String sql = "SELECT * FROM users";
return jdbcTemplate2.queryForList(sql);
}
}7. 總結(jié)
通過(guò)Spring Boot,我們可以輕松地連接和操作多個(gè)數(shù)據(jù)庫(kù)。通過(guò)配置數(shù)據(jù)源,創(chuàng)建JdbcTemplate對(duì)象,使用@Qualifier注解指定數(shù)據(jù)源,以及使用事務(wù)管理器,我們可以靈活地處理多數(shù)據(jù)庫(kù)的需求。