Spring Boot多數(shù)據(jù)源及其事務(wù)管理配置

Spring Boot多數(shù)據(jù)源及其事務(wù)管理配置

[TOC]

準(zhǔn)備工作

先給我們的項(xiàng)目添加Spring-JDBC依賴和需要訪問(wèn)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)依賴。

配置文件

spring.datasource.prod.driverClassName=com.mysql.jdbc.Driver
spring.datasource.prod.url=jdbc:mysql://127.0.0.1:3306/prod
spring.datasource.prod.username=root
spring.datasource.prod.password=123456
 
spring.datasource.dev.driverClassName=com.mysql.jdbc.Driver
spring.datasource.dev.url=jdbc:mysql://127.0.0.1:3306/dev
spring.datasource.dev.username=root
spring.datasource.dev.password=123456

JavaConfig

首先建立Java配置類(lèi),為其添加上注解@Configuration。

@Configuration
public class JdbcConfig {
 
}

配置數(shù)據(jù)源

  • 給其中一個(gè)數(shù)據(jù)源加上@Primary。因?yàn)樵赟pring Boot Jdbc的自動(dòng)配置過(guò)程中,會(huì)對(duì)于開(kāi)發(fā)者透明地使用dataSource進(jìn)行一些相關(guān)配置,所以當(dāng)有兩個(gè)Datasource實(shí)現(xiàn)類(lèi)時(shí),Spring Boot將無(wú)法確定使用哪一個(gè)。
  • 當(dāng)我們不為@Bean指定名字時(shí),Spring會(huì)默認(rèn)使用方法名作為Bean的名字,所以下面兩個(gè)數(shù)據(jù)源的名字分別為prodDataSourcedevDataSource
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource.prod")
public DataSource prodDataSource(){
    return DataSourceBuilder.create().build();
}
 
@Bean
@ConfigurationProperties(prefix = "spring.datasource.dev")
public DataSource devDataSource(){
    return DataSourceBuilder.create().build();
}

配置文件里的屬性名是不需要寫(xiě)成spring.datasource.xxx的形式的,寫(xiě)成a.b.c.url也沒(méi)有問(wèn)題,只要在配置bean時(shí)指定前綴為a.b.c

配置JdbcTemplate

  • 在此我們返回的不是JdbcTemplate的實(shí)現(xiàn),而是其實(shí)現(xiàn)接口JdbcOperations。
  • 使用@Qualifier注解指定該注入哪個(gè)bean,默認(rèn)名字為定義該bean的方法名。
@Bean
public JdbcOperations prodJdbcOperations(@Qualifier("prodDataSource") DataSource prodDataSource) {
    return new JdbcTemplate(prodDataSource);
}
 
@Bean
public JdbcOperations devJdbcOperations(@Qualifier("devDataSource") DataSource devDataSource) {
    return new JdbcTemplate(devDataSource);
}

使用

  • 直接注入JdbcOperations即可
    @Autowired
    private JdbcOperations devJdbcOperations;
 
    @Autowired
    private JdbcOperations prodJdbcOperations;

事務(wù)配置

開(kāi)啟事務(wù)管理功能

在項(xiàng)目入口類(lèi),添加以下注解開(kāi)啟事務(wù)管理功能。

@EnableTransactionManagement

配置事務(wù)管理器

@Bean
public PlatformTransactionManager prodTransactionManager(@Qualifier("prodDataSource") DataSource prodDataSource) {
    return new DataSourceTransactionManager(prodDataSource);
}
 
@Bean
public PlatformTransactionManager devTransactionManager(@Qualifier("devDataSource") DataSource sitDataSource) {
    return new DataSourceTransactionManager(sitDataSource);
}

使用

使用時(shí)只需在需要事務(wù)的方法添加注解@Transactional,并指定其value值即可。同樣的,value值與相應(yīng)的方法名相匹配即可。

@Transactional(value = "prodTransactionManager")
public void prod() {
    prodJdbcOperations.queryForList("SELECT * FROM USER");
}
 
@Transactional(value = "devTransactionManager")
public void dev() {
    devJdbcOperations.queryForList("SELECT * FROM USER");
}

注意,@Transactional配置事務(wù)有很多限制,如方法必須為public,同一個(gè)類(lèi)中無(wú)該注解的方法調(diào)用有注解的方法事務(wù)不生效等。該注解還可以配置在接口類(lèi)等地方,具體用法請(qǐng)參考Spring官方文檔相應(yīng)章節(jié) http://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/transaction.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容