springboot項目多數據源及其事務


多數據源:

1、數據源配置類 DB***Config.java(幾個數據源寫幾個此類)

2、數據源對應數據庫連接pom

3、啟動類加注解

//關閉springBoot關於mybatis的一些自動注入(多數據源),DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class防止報錯NoUniqueBeanDefinitionException

@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class})

//@MapperScan(basePackages ="com.example.demo.dao")//mapper映射接口所在包路徑(單數據源用到

 

4、數據庫地址賬號 配置

注意事項:

spring boot應用,通常我們在進行數據管理時,只操作一個數據源的表,需要開啟事務管理,只需要在服務啟動類增加@EnableTransactionManagement注解,在需要事務控制的方法增加@Transactional注解即可。

數據源配置類:

@ConfigurationProperties("spring.datasource.wkAutoNotice")

此注解不支持駝峰命名法和下划線,修改為全部小寫

多數據源,寫聲明式事務注解時,需要加value屬性 如:@Transactional(value = "dbwkautonoticeTransactionManager") 

 

@Primary//在配置兩個數據源的時候,在其中一個數據源加上注解@Primary即可,多個transactionManager
@Configuration
@MapperScan(basePackages = "com.example.demo.dao.daobase",sqlSessionFactoryRef = "wkAutoNoticeSqlSessionFactory")
public class DBWkguideAutoNoticeConfig {
    @Primary
    @Bean(name = "wkAutoNoticeDataSource")
    @ConfigurationProperties("spring.datasource.wkautonotice")//配置中jdbcUrl、driverClassName、username、password等配置前綴
    public DataSource masterDataSource(){
        return DataSourceBuilder.create().build();
    }
 
    @Bean(name = "wkAutoNoticeSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("wkAutoNoticeDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath:mapper/*.xml"));//mapper.xml文件路徑。
        return sessionFactoryBean.getObject();
    }
    @Bean//方法名就是事務value如:@Transactional(value = "dbwkautonoticeTransactionManager") 
    public PlatformTransactionManager dbwkautonoticeTransactionManager(@Qualifier("wkAutoNoticeDataSource") DataSource prodDataSource) { 
        return new DataSourceTransactionManager(prodDataSource); 
    }
}

MySQL數據源配置類:

@Configuration
@MapperScan(basePackages = "com.example.demo.dao.daoprintorder",sqlSessionFactoryRef = "printorderSqlSessionFactory")
public class DBMySqlPrintorder {
    @Primary
    @Bean(name = "printorderDataSource")
    @ConfigurationProperties("spring.datasource.printorder")//配置中jdbcUrl、driverClassName、username、password等配置前綴
    public DataSource masterDataSource(){
        return DataSourceBuilder.create().build();
    }
 
    @Bean(name = "printorderSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("printorderDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath:mapper/printorder/*.xml"));//mapper.xml文件路徑。
        return sessionFactoryBean.getObject();
    }
    @Bean//方法名就是事務value如:@Transactional(value = "printorderTransactionManager") 
    public PlatformTransactionManager printorderTransactionManager(@Qualifier("printorderDataSource") DataSource prodDataSource) { 
        return new DataSourceTransactionManager(prodDataSource); 
    }
}

注意:上邊不同數據庫對應mapper.xml 路徑不一樣

數據庫配置:

spring:
datasource: wkautonotice: ConnectionTestQuery: SELECT 1 jdbcUrl: jdbc:sqlserver://qn.yu****ji.com:30005;databasename=W*****st driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver username: ***** password: **** # sql-script-encoding: utf-8 printorder: driver-class-name: com.mysql.cj.jdbc.Driver jdbcUrl: jdbc:mysql://rm-bp17a******o.mysql.rds.aliyuncs.com:3306/*********
username: **** password: ****

# pageHelper 分頁插件配置
pagehelper:

 reasonable: false
 supportMethodsArguments: true
 params: count=countSql
#默認false,當為true時,自動檢驗適合的數據庫
 auto-dialect: true

#pagehelper多數據源這個一定要加上,不然mysql和oracle分頁兩個只能用一個,另一個會報錯,加上后,兩中數據庫分頁都可以用了,自動識別方言

 auto-runtime-dialect: true

 啟動類加注解:

@SpringBootApplication
@EnableTransactionManagement//開啟事務管理
@EnableCaching//開啟緩存功能redis需要配置
@EnableScheduling //開啟定時任務
//關閉springBoot關於mybatis的一些自動注入(多數據源),DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class防止報錯NoUniqueBeanDefinitionException
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class})
//@MapperScan(basePackages ="com.example.demo.dao")//mapper映射接口所在包路徑(單數據源
public class DemoApplication {

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM