• 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 {

    源码,是痛苦的,又是快乐的,如果没有这痛苦,也就没有了这快乐!
  • 相关阅读:
    [LeetCode] 1081. Smallest Subsequence of Distinct Characters 不同字符的最小子序列
    [LeetCode] 1080. Insufficient Nodes in Root to Leaf Paths 根到叶路径上的不足节点
    [LeetCode] 1079. Letter Tile Possibilities 活字印刷
    [LeetCode] 1078. Occurrences After Bigram 双元语法分词
    [LeetCode] 1074. Number of Submatrices That Sum to Target 元素和为目标值的子矩阵数量
    [LeetCode] 1073. Adding Two Negabinary Numbers 负二进制数相加
    [LeetCode] 1072. Flip Columns For Maximum Number of Equal Rows 按列翻转得到最大值等行数
    [LeetCode] 1071. Greatest Common Divisor of Strings 字符串的最大公因子
    [LeetCode] 1054. Distant Barcodes 距离相等的条形码
    [LeetCode] 1053. Previous Permutation With One Swap 交换一次的先前全排列
  • 原文地址:https://www.cnblogs.com/erlongxizhu-03/p/10642578.html
Copyright © 2020-2023  润新知