如何在Springboot中配置多個(gè)數(shù)據(jù)庫(kù)?
一、添加數(shù)據(jù)庫(kù)依賴
在pom.xml文件中添加需要使用的數(shù)據(jù)庫(kù)依賴。例如,如果我們需要使用MySQL和Oracle數(shù)據(jù)庫(kù),則需要添加以下依賴:
mysql
mysql-connector-java
{MySQL版本號(hào)}
com.oracle.database.jdbc
ojdbc8
{Oracle版本號(hào)}
二、配置數(shù)據(jù)源
在Spring Boot項(xiàng)目中,我們可以使用application.properties或application.yml配置文件來(lái)配置數(shù)據(jù)源。通常情況下,我們需要為每個(gè)數(shù)據(jù)庫(kù)配置一個(gè)數(shù)據(jù)源。
使用application.properties配置數(shù)據(jù)源
在application.properties文件中,我們可以使用以下配置來(lái)配置數(shù)據(jù)源:
# MySQL 數(shù)據(jù)源配置
spring.datasource.mysql.url={MySQL數(shù)據(jù)庫(kù)連接地址}
spring.datasource.mysql.username={MySQL數(shù)據(jù)庫(kù)用戶名}
spring.datasource.mysql.password={MySQL數(shù)據(jù)庫(kù)密碼}
spring.datasource.mysql.driver-class-name=com.mysql.cj.jdbc.Driver
# Oracle 數(shù)據(jù)源配置
spring.datasource.oracle.url={Oracle數(shù)據(jù)庫(kù)連接地址}
spring.datasource.oracle.username={Oracle數(shù)據(jù)庫(kù)用戶名}
spring.datasource.oracle.password={Oracle數(shù)據(jù)庫(kù)密碼}
spring.datasource.oracle.driver-class-name=oracle.jdbc.driver.OracleDriver
使用application.yml配置數(shù)據(jù)源
在application.yml文件中,我們可以使用以下配置來(lái)配置數(shù)據(jù)源:
# MySQL 數(shù)據(jù)源配置
spring:
datasource:
mysql:
url: {MySQL數(shù)據(jù)庫(kù)連接地址}
username: {MySQL數(shù)據(jù)庫(kù)用戶名}
password: {MySQL數(shù)據(jù)庫(kù)密碼}
driver-class-name: com.mysql.cj.jdbc.Driver
# Oracle 數(shù)據(jù)源配置
spring:
datasource:
oracle:
url: {Oracle數(shù)據(jù)庫(kù)連接地址}
username: {Oracle數(shù)據(jù)庫(kù)用戶名}
password: {Oracle數(shù)據(jù)庫(kù)密碼}
driver-class-name: oracle.jdbc.driver.OracleDriver
三、配置JdbcTemplate
在Spring Boot項(xiàng)目中,我們可以使用JdbcTemplate來(lái)訪問(wèn)數(shù)據(jù)庫(kù)。為了訪問(wèn)多個(gè)數(shù)據(jù)庫(kù),我們需要為每個(gè)數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)JdbcTemplate實(shí)例。
@Configuration
public class DataSourceConfig {
@Bean(name = "mysqlJdbcTemplate")
public JdbcTemplate mysqlJdbcTemplate(@Qualifier("mysqlDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name = "oracleJdbcTemplate")
public JdbcTemplate oracleJdbcTemplate(@Qualifier("oracleDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name = "mysqlDataSource")
@ConfigurationProperties(prefix = "spring.datasource.mysql")
public DataSource mysqlDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "oracleDataSource")
@ConfigurationProperties(prefix = "spring.datasource.oracle")
public DataSource oracleDataSource() {
return DataSourceBuilder.create().build();
}
}
在上述代碼中,我們定義了兩個(gè)JdbcTemplate實(shí)例:mysqlJdbcTemplate和oracleJdbcTemplate。每個(gè)JdbcTemplate實(shí)例都需要一個(gè)對(duì)應(yīng)的數(shù)據(jù)源,因此我們還定義了兩個(gè)數(shù)據(jù)源:mysqlDataSource和oracleDataSource。
通過(guò)@Bean注解,我們將這些實(shí)例注冊(cè)到Spring容器中。@Qualifier注解用于指定使用哪個(gè)數(shù)據(jù)源。
四、使用JdbcTemplate訪問(wèn)數(shù)據(jù)庫(kù)
現(xiàn)在我們已經(jīng)完成了多個(gè)數(shù)據(jù)庫(kù)的配置和數(shù)據(jù)源的創(chuàng)建,可以使用JdbcTemplate來(lái)訪問(wèn)數(shù)據(jù)庫(kù)了。
@Service
public class UserService {
@Autowired
@Qualifier("mysqlJdbcTemplate")
private JdbcTemplate mysqlJdbcTemplate;
@Autowired
@Qualifier("oracleJdbcTemplate")
private JdbcTemplate oracleJdbcTemplate;
public List getAllUsersFromMySQL() {
String sql = "SELECT * FROM user";
return mysqlJdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
}
public List getAllUsersFromOracle() {
String sql = "SELECT * FROM user";
return oracleJdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
}
}
在上述代碼中,我們使用@Autowired注解將mysqlJdbcTemplate和oracleJdbcTemplate注入到UserService中。使用JdbcTemplate的query()方法可以執(zhí)行SQL查詢語(yǔ)句并返回結(jié)果。
springboot的優(yōu)點(diǎn)是什么?
1.可快速構(gòu)建獨(dú)立的 Spring 應(yīng)用
Spring Boot是一個(gè)依靠大量注解實(shí)現(xiàn)自動(dòng)化配置的全新框架。在構(gòu)建Spring應(yīng)用時(shí),我們只需要添加相應(yīng)的場(chǎng)景依賴,Spring Boot就會(huì)根據(jù)添加的場(chǎng)景依賴自動(dòng)進(jìn)行配置,在無(wú)須額外手動(dòng)添加配置的情況下快速構(gòu)建出一個(gè)獨(dú)立的Spring應(yīng)用。
2.直接嵌入Tomcat、Jetty 和Undertow 服務(wù)器(無(wú)須部署WAR文件)
傳統(tǒng)的Spring應(yīng)用部署時(shí),通常會(huì)將應(yīng)用打成 WAR包形式并部署到Tomcat、Jetty或Undertow 服務(wù)器中。Spring Boot框架內(nèi)嵌了Tomcat、Jetty和Undertow 服務(wù)器,而且可以自動(dòng)將項(xiàng)目打包,并在項(xiàng)目運(yùn)行時(shí)部署到服務(wù)器中。
3.通過(guò)依賴啟動(dòng)器簡(jiǎn)化構(gòu)建配置
在Spring Boot項(xiàng)目構(gòu)建過(guò)程中,無(wú)須準(zhǔn)備各種獨(dú)立的JAR文件,只需在構(gòu)建項(xiàng)目時(shí)根據(jù)開發(fā)場(chǎng)景需求選擇對(duì)應(yīng)的依賴啟動(dòng)器“starter”,在引入的依賴啟動(dòng)器“starter”內(nèi)部已經(jīng)包含了對(duì)應(yīng)開發(fā)場(chǎng)景所需的依賴,并會(huì)自動(dòng)下載和拉取相關(guān)JAR包。例如,在Web開發(fā)時(shí),只需在構(gòu)建項(xiàng)目時(shí)選擇對(duì)應(yīng)的Web場(chǎng)景依賴啟動(dòng)器spring-boot-starter-web,Spring Boot項(xiàng)目便會(huì)自動(dòng)導(dǎo)入spring-webmvc、spring-web、spring-boot-starter-tomcat等子依賴,并自動(dòng)下載和獲取Web開發(fā)需要的相關(guān)JAR包。
4.自動(dòng)化配置Spring和第三方庫(kù)
Spring Boot 充分考慮到與傳統(tǒng)Spring 框架以及其他第三方庫(kù)融合的場(chǎng)景,在提供了各種場(chǎng)景依賴啟動(dòng)器的基礎(chǔ)上,內(nèi)部還默認(rèn)提供了各種自動(dòng)化配置類(例如 RedisAuto Configuration)。使用Spring Boot開發(fā)項(xiàng)目時(shí),一旦引入了某個(gè)場(chǎng)景的依賴啟動(dòng)器,Spring Boot內(nèi)部提供的默認(rèn)自動(dòng)化配置類就會(huì)生效,開發(fā)者無(wú)須手動(dòng)在配置文件中進(jìn)行相關(guān)配置(除非開發(fā)者需要更改默認(rèn)配置),從而極大減少了開發(fā)人員的工作量,提高了程序的開發(fā)效率。
5.提供生產(chǎn)就緒功能
Spring Boot提供了一些用于生產(chǎn)環(huán)境運(yùn)行時(shí)的特性,例如指標(biāo)、監(jiān)控檢查和外部化配置。其中,指標(biāo)和監(jiān)控檢查可以幫助運(yùn)維人員在運(yùn)維期間監(jiān)控項(xiàng)目運(yùn)行情況;外部化配置可以使運(yùn)維人員快速、方便地進(jìn)行外部化配置和部署工作。
6.極少的代碼生成和XML配置
Spring Boot 框架內(nèi)部已經(jīng)實(shí)現(xiàn)了與Spring以及其他常用第三方庫(kù)的整合連接,并提供了默認(rèn)最優(yōu)化的整合配置,使用時(shí)基本上不需要額外生成配置代碼和XML配置文件。在需要自定義配置的情況下,Spring Boot更加提倡使用Java config(Java 配置類)替換傳統(tǒng)的XML配置方式,這樣更加方便查看和管理。
雖然說(shuō) Spring Boot有諸多的優(yōu)點(diǎn),但Spring Boot也有一些缺點(diǎn)。例如,Spring Boot入門較為簡(jiǎn)單,但是深入理解和學(xué)習(xí)卻有一定的難度,這是因?yàn)镾pringBoot是在Spring框架的基礎(chǔ)上推出的,所以讀者想要弄明白Spring Boot的底層運(yùn)行機(jī)制,有必要對(duì)Spring框架有一定的了解。