spring boot 多数据源 + 事务控制
1,首先在启动类加上@EnableTransactionManagement注解
package cn.bforce.common; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.transaction.annotation.EnableTransactionManagement; @SpringBootApplication
@ComponentScan(basePackages={"cn.bforce.common"})
@EnableCaching
@EnableTransactionManagement
public class YuntuSysBaseApplication { public static void main(String[] args) {
SpringApplication.run(YuntuSysBaseApplication.class, args);
}
}
2,application.properties文件配置的双数据源文件配置
#datasource b-force
spring.datasource.bf.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.bf.url=jdbc:mysql://192.168.18.221:3306/b-force?characterEncoding=utf8&useSSL=true
spring.datasource.bf.username=root
spring.datasource.bf.password=root spring.datasource.bfscrm.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.bfscrm.url=jdbc:mysql://192.168.18.221:3306/b-force-scrm?characterEncoding=utf8&useSSL=true
spring.datasource.bfscrm.username=root
spring.datasource.bfscrm.password=root
3,JavaConfig 首先建立Java配置类,为其添加上注解@Configuration
。并实现如下方法。
package cn.bforce.common.persistence.datasource; import javax.sql.DataSource; 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.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager; @Configuration
public class GlobalDataConfiguration
{
@Bean(name = "bfDataSource")
@Qualifier("bfDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.bf")
public DataSource primaryDataSource()
{
System.out.println("-------------------- bfDataSource init ---------------------");
return DataSourceBuilder.create().build();
} @Bean(name = "bfscrmDataSource")
@Qualifier("bfscrmDataSource")
@ConfigurationProperties(prefix = "spring.datasource.bfscrm")
public DataSource secondaryDataSource()
{
System.out.println("-------------------- bfscrmDataSource init ---------------------");
return DataSourceBuilder.create().build();
} @Bean(name = "bfJdbcTemplate")
public JdbcTemplate bfJdbcTemplate(@Qualifier("bfDataSource") DataSource dataSource)
{
return new JdbcTemplate(dataSource);
} @Bean(name = "bfscrmJdbcTemplate")
public JdbcTemplate bfscrmscrmJdbcTemplate(@Qualifier("bfscrmDataSource") DataSource dataSource)
{
return new JdbcTemplate(dataSource);
} /******配置事务管理********/ @Bean
public PlatformTransactionManager bfTransactionManager(@Qualifier("bfDataSource")DataSource prodDataSource) {
return new DataSourceTransactionManager(prodDataSource);
} @Bean
public PlatformTransactionManager bfscrmTransactionManager(@Qualifier("bfscrmDataSource")DataSource sitDataSource) {
return new DataSourceTransactionManager(sitDataSource);
} }
4,使用。
@Transactional(value = "bfscrmTransactionManager",readOnly=true)
public DataObject doLoad(Serializable rowId)
{
return shopLbsRepository.doLoad(rowId);
} @Transactional(value = "bfscrmTransactionManager")
public int doUpdate(String v) {
shopLbsRepository.doUpdate(v);
int a = 8/0;
return 1;
}
总结:测试可用的。
****最后说明:如果要用指定的那个数据源,注解 JdbcTemplate 的时候。看如下代码。
@Autowired
@Qualifier("bfscrmJdbcTemplate")
protected JdbcTemplate jdbcTemp; @Autowired
@Qualifier("bfscrmDataSource")
protected DataSource dataSource;
@Autowired
@Qualifier("bfJdbcTemplate")
protected JdbcTemplate jdbcTemp; @Autowired
@Qualifier("bfDataSource")
protected DataSource dataSource;
************************
博主给自己的小程序打个广告,支付宝搜索: 变换购物助手
淘宝,天猫购物最高返利谢谢大家使用支持
spring boot 多数据源 + 事务控制的更多相关文章
- 关于Spring Boot 多数据源的事务管理
自己的一些理解:自从用了Spring Boot 以来,这近乎零配置和"约定大于配置"的设计范式用着确实爽,其实对零配置的理解是:应该说可以是零配置可以跑一个简单的项目,因为Spri ...
- Spring Boot中的事务管理
原文 http://blog.didispace.com/springboottransactional/ 什么是事务? 我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合 ...
- (43). Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】
在上一篇我们介绍了多数据源,但是我们会发现在实际中我们很少直接获取数据源对象进行操作,我们常用的是jdbcTemplate或者是jpa进行操作数据库.那么这一节我们将要介绍怎么进行多数据源动态切换.添 ...
- spring + ibatis 多数据源事务(分布式事务)管理配置方法(转)
spring + ibatis 多数据源事务(分布式事务)管理配置方法(转) .我先要给大家讲一个概念:spring 的多数据源事务,这是民间的说法.官方的说法是:spring 的分布式事务.明白了这 ...
- Spring Boot多数据源配置(二)MongoDB
在Spring Boot多数据源配置(一)durid.mysql.jpa 整合中已经讲过了Spring Boot如何配置mysql多数据源.本篇文章讲一下Spring Boot如何配置mongoDB多 ...
- Spring Boot中的事务是如何实现的
本文首发于微信公众号[猿灯塔],转载引用请说明出处 今天呢!灯塔君跟大家讲: Spring Boot中的事务是如何实现的 1. 概述 一直在用SpringBoot中的@Transactional来做事 ...
- 【Spring】Spring boot多数据源历险记
一.问题描述 笔者根据需求在开发过程中,需要在原项目的基础上(单数据源),新增一个数据源C,根据C数据源来实现业务.至于为什么不新建一个项目,大概是因为这只是个小功能,访问量不大,不需要单独申请个服务 ...
- Spring Boot 声明式事务结合相关拦截器
我这项目的读写分离方式在使用ThreadLocal实现的读写分离在迁移后的偶发错误里提了,我不再说一次了,这次是有要求读写分离与事务部分要完全脱离配置文件,程序员折腾了很久,于是我就查了一下,由于我还 ...
- spring boot(12)-数据源配置原理
本篇讲的不仅是数据源配置,这也是spring boot实现自动配置的一部分.要理解数据源的配置原理,首先要理解第十篇tomcat连接池的配置 数据源配置源码 这里截取org.springframewo ...
随机推荐
- CentOS代理设置
1.全局的代理设置: vi /etc/profile 添加下面内容 http_proxy = http://username:password@yourproxy:8080/ftp_proxy = h ...
- LINUX中的ACL
一. 为什么要使用ACL先让我们来简单地复习一下Linux的文件权限. 在 linux下,对一个文件(或者资源)可以进行操作的对象被分为三类: file owner(文件 的拥有者),group(组, ...
- 009-jdk1.8版本新特性一-展方法,Lambda表达式,函数式接口、方法引用构造引用
一.JDK1.8 名称:Spider(蜘蛛) 发布日期:2014-03-18 新特性: 1.1.扩展方法[接口的默认方法] Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 defaul ...
- Android常用权限permission列表摘录
一个Android应用程序需要权限才能调用某些android系统的功能:一个android应用也可能被其他应用调用,因此也需要声明调用自身所需要的权限.除了平时常用的权限记得比较熟悉,还有很多的权限一 ...
- liferay增删改简单小练习
liferay简单增删改 大家都知道,我们每学习一项技能的时候,都会做一些简单的小实例,来检验我们学习成果,这个也不例外. 我建议大家学习完三大框架之后再来看这个demo. 首先:先说一下,零碎的知识 ...
- ModelSim使用$display查看变量值和输出信息
打开ModelSim,新建工程->新建Verilog文件demo.v 输入文件内容 module demo(); reg[3:0] a,b; initial begin $display(&qu ...
- VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类)
上一节中鸡啄米讲了定时器Timer的用法,本节介绍下文件操作类CFile类的使用. CFile类概述 如果你学过C语言,应该知道文件操作使用的是文件指针,通过文件指针实现对它指向的文件的各种操作.这些 ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON MirrorImage
zw版[转发·台湾nvp系列Delphi例程]HALCON MirrorImage procedure TForm1.Button1Click(Sender: TObject);var img, im ...
- 3/5/2014 cfb 小心
During each move the player can choose all lines of the matrix where dwarf is not on the cell with c ...
- Python: 在序列上执行聚集函数(比如sum() , min() , max() )
在序列上执行聚集函数(比如sum() , min() , max() ) eg1: >>>nums = [1, 2, 3, 4, 5]>>>s = sum(x * ...