热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

springBoot多数据源配置以及事务控制

一:多数据源配置1、主数据源配置文件packagecom.bert.datasource;importorg.apache.ibatis.session.SqlS

一:多数据源配置

1、主数据源配置文件

package com.bert.datasource;import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import com.github.pagehelper.PageInterceptor;import java.util.Properties;import javax.sql.DataSource;@Configuration
@MapperScan(basePackages = "com.bert.mapper.master1", sqlSessionTemplateRef = "master1SqlSessionTemplate")
public class DataSource1Config {@Bean(name = "master1DataSource")@ConfigurationProperties(prefix = "master1.datasource")@Primarypublic DataSource master1DataSource() {return DataSourceBuilder.create().build();}@Bean(name = "master1SqlSessionFactory")@Primarypublic SqlSessionFactory master1SqlSessionFactory(@Qualifier("master1DataSource") DataSource dataSource)throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/master1/*.xml"));// 分页拦截器-beginPageInterceptor pageHelper = new PageInterceptor();Properties properties = new Properties();properties.setProperty("helperDialect", "com.github.pagehelper.dialect.helper.SqlServerDialect");properties.setProperty("offsetAsPageNum", "true");properties.setProperty("rowBoundsWithCount", "false");properties.setProperty("reasonable", "false");pageHelper.setProperties(properties);bean.getObject().getConfiguration().addInterceptor(pageHelper);return bean.getObject();}@Bean(name = "master1TransactionManager")@Primarypublic DataSourceTransactionManager master1TransactionManager(@Qualifier("master1DataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "master1SqlSessionTemplate")@Primarypublic SqlSessionTemplate master1SqlSessionTemplate(@Qualifier("master1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}}

2、其他数据源配置文件

package com.bert.datasource;import java.util.Properties;import javax.sql.DataSource;import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import com.github.pagehelper.PageInterceptor;@Configuration
@MapperScan(basePackages = "com.bert.mapper.master2", sqlSessionTemplateRef = "master2SqlSessionTemplate")
public class DataSource2Config {@Bean(name = "master2DataSource")@ConfigurationProperties(prefix = "master2.datasource")public DataSource master2DataSource() {return DataSourceBuilder.create().build();}@Bean(name = "master2SqlSessionFactory")public SqlSessionFactory master2SqlSessionFactory(@Qualifier("master2DataSource") DataSource dataSource)throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/master2/*.xml"));// 分页拦截器-beginPageInterceptor pageHelper = new PageInterceptor();Properties properties = new Properties();properties.setProperty("helperDialect", "com.github.pagehelper.dialect.helper.SqlServerDialect");properties.setProperty("offsetAsPageNum", "true");properties.setProperty("rowBoundsWithCount", "false");properties.setProperty("reasonable", "false");pageHelper.setProperties(properties);bean.getObject().getConfiguration().addInterceptor(pageHelper);return bean.getObject();}@Bean(name = "master2TransactionManager")public DataSourceTransactionManager master2TransactionManager(@Qualifier("master2DataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "master2SqlSessionTemplate")public SqlSessionTemplate master2SqlSessionTemplate(@Qualifier("master2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}}

注意:
A:只能有一个主数据源,用注解@Primary表示
B:@MapperScan属性basePackages,表示数据源对应的mapper文件目录

3、springBoot配置文件

master1.datasource.url=jdbc:sqlserver://ip1:1433; DatabaseName=db1
master1.datasource.username=xx
master1.datasource.password=xxxxxx
master1.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDrivermaster2.datasource.url=jdbc:sqlserver://ip2:1433; DatabaseName=db2
master2.datasource.username=xx
master3.datasource.password=xxxxxx
master2.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver

二:多数据源事务控制

1、启动文件,配置事务注解@EnableTransactionManagement

@Controller
@SpringBootApplication
@EnableSwagger2
@EnableTransactionManagement
public class BootMain extends SpringBootServletInitializer{@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(BootMain.class);}public static void main(String[] args) {SpringApplication.run(BootMain.class, args);}}

2、接口实现配置事务注解@Transactional

如果是单一数据源,只需要在service实现的方法上加上@Transactional即可。
如果是多数据源,需要指定事务管理器名称

@Transactional(value = "master2TransactionManager", rollbackFor = { Exception.class })

我在微信订阅号等你!
这里写图片描述


推荐阅读
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • AFNetwork框架(零)使用NSURLSession进行网络请求
    本文介绍了AFNetwork框架中使用NSURLSession进行网络请求的方法,包括NSURLSession的配置、请求的创建和执行等步骤。同时还介绍了NSURLSessionDelegate和NSURLSessionConfiguration的相关内容。通过本文可以了解到AFNetwork框架中使用NSURLSession进行网络请求的基本流程和注意事项。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
author-avatar
卢启红
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有