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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现