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 {

 

 

本文作者:好Wu赖

本文链接:https://www.cnblogs.com/erlongxizhu-03/p/10642578.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   好Wu赖  阅读(6026)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起