文档章节

Spring Boot多数据源及其事务管理配置

l
 lzp4ever
发布于 2017/04/08 11:24
字数 591
阅读 40
收藏 2
点赞 0
评论 0

Spring Boot多数据源及其事务管理配置

[TOC]

准备工作

先给我们的项目添加Spring-JDBC依赖和需要访问数据库的驱动依赖。

配置文件

spring.datasource.prod.driverClassName=com.mysql.jdbc.Driver
spring.datasource.prod.url=jdbc:mysql://127.0.0.1:3306/prod
spring.datasource.prod.username=root
spring.datasource.prod.password=123456
 
spring.datasource.dev.driverClassName=com.mysql.jdbc.Driver
spring.datasource.dev.url=jdbc:mysql://127.0.0.1:3306/dev
spring.datasource.dev.username=root
spring.datasource.dev.password=123456

JavaConfig

首先建立Java配置类,为其添加上注解@Configuration

@Configuration
public class JdbcConfig {
 
}

配置数据源

  • 给其中一个数据源加上@Primary。因为在Spring Boot Jdbc的自动配置过程中,会对于开发者透明地使用dataSource进行一些相关配置,所以当有两个Datasource实现类时,Spring Boot将无法确定使用哪一个。
  • 当我们不为@Bean指定名字时,Spring会默认使用方法名作为Bean的名字,所以下面两个数据源的名字分别为prodDataSourcedevDataSource
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource.prod")
public DataSource prodDataSource(){
    return DataSourceBuilder.create().build();
}
 
@Bean
@ConfigurationProperties(prefix = "spring.datasource.dev")
public DataSource devDataSource(){
    return DataSourceBuilder.create().build();
}

配置文件里的属性名是不需要写成spring.datasource.xxx的形式的,写成a.b.c.url也没有问题,只要在配置bean时指定前缀为a.b.c

配置JdbcTemplate

  • 在此我们返回的不是JdbcTemplate的实现,而是其实现接口JdbcOperations
  • 使用@Qualifier注解指定该注入哪个bean,默认名字为定义该bean的方法名。
@Bean
public JdbcOperations prodJdbcOperations(@Qualifier("prodDataSource") DataSource prodDataSource) {
    return new JdbcTemplate(prodDataSource);
}
 
@Bean
public JdbcOperations devJdbcOperations(@Qualifier("devDataSource") DataSource devDataSource) {
    return new JdbcTemplate(devDataSource);
}

使用

  • 直接注入JdbcOperations即可
    @Autowired
    private JdbcOperations devJdbcOperations;
 
    @Autowired
    private JdbcOperations prodJdbcOperations;

事务配置

开启事务管理功能

在项目入口类,添加以下注解开启事务管理功能。

@EnableTransactionManagement

配置事务管理器

@Bean
public PlatformTransactionManager prodTransactionManager(@Qualifier("prodDataSource") DataSource prodDataSource) {
    return new DataSourceTransactionManager(prodDataSource);
}
 
@Bean
public PlatformTransactionManager devTransactionManager(@Qualifier("devDataSource") DataSource sitDataSource) {
    return new DataSourceTransactionManager(sitDataSource);
}

使用

使用时只需在需要事务的方法添加注解@Transactional,并指定其value值即可。同样的,value值与相应的方法名相匹配即可。

@Transactional(value = "prodTransactionManager")
public void prod() {
    prodJdbcOperations.queryForList("SELECT * FROM USER");
}
 
@Transactional(value = "devTransactionManager")
public void dev() {
    devJdbcOperations.queryForList("SELECT * FROM USER");
}

注意,@Transactional配置事务有很多限制,如方法必须为public,同一个类中无该注解的方法调用有注解的方法事务不生效等。该注解还可以配置在接口类等地方,具体用法请参考Spring官方文档相应章节 http://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/transaction.html

© 著作权归作者所有

共有 人打赏支持
l
粉丝 6
博文 6
码字总数 4680
作品 0
广州
spring-boot-starter-mongodb-pool

在日常工作中,我们通过Spring Data Mongodb来操作Mongodb数据库,在Spring Boot中只需要引入spring-boot-starter-data-mongodb即可。 很多时候我们往往需要操作多个数据库(微服务架构下一个...

尹吉欢 ⋅ 04/22 ⋅ 0

Spring boot中mongodb的使用

mongodb的增删改查 Spring Boot对各种流行的数据源都进行了封装,当然也包括了mongodb,下面给大家介绍如何在spring boot中使用mongodb: 1、pom包配置 pom包里面添加spring-boot-starter-dat...

glen_xu ⋅ 06/11 ⋅ 0

BeetlSQL 2.10.23 发布,Java Dao 工具

本次主要增加了Spring Boot 多数据源配置功能 #IJV68 beetlsql starter 支持多数据源,mapper也支持 #IJT15 SQLiteStyle 分页 SQL 错误 #IJSD7 Query 查询 其他库表有问题 #IJNOD sql文件默认...

闲大赋 ⋅ 05/21 ⋅ 0

SpringBoot 多数据源快速启动器 - dynamic-datasource-spring-boot-starter

dynamic-datasource-spring-boot-starter 简介 dynamic-datasource-spring-boot-starter 基于 springBoot2.0. 它适用于读写分离,一主多从的环境。 主数据库使用 操作. 从数据库使用 操作. 如...

小锅盖 ⋅ 05/02 ⋅ 0

程序猿DD/SpringBoot-Learning

Spring Boot基础教程 本项目内容为Spring Boot教程程序样例。如您觉得该项目对您有用,欢迎点击右上方的Star按钮,给予支持!! 我的博客:http://blog.didispace.com 我的小密圈(深度交流与...

程序猿DD ⋅ 2016/11/03 ⋅ 0

Spring AOP 日志拦截器的事务管理

如果要在方法执行前或后或抛出异常后加上一个自己的拦截器,或者一个环绕拦截器,在拦截器中执行一些操作,比如执行一些数据库操作,记录一些信 息,这些操作通过调用一个服务类的方法来执行...

哲别0 ⋅ 05/18 ⋅ 0

dynamic-datasource-spring-boot-starter V1.1.0 发布

SpringBoot2.x默认使用HikariCP,但在国内Druid的使用者非常庞大,此项目特地对其进行了适配,完成多数据源下使用Druid进行监控。 项目引入druid-spring-boot-starter依赖。 com.alibaba dr...

小锅盖 ⋅ 05/05 ⋅ 0

基于可靠消息方案的分布式事务(二):Java中的事务

前言:在上一篇文章 基于可靠消息方案的分布式事务:Lottor介绍 中介绍了常见的分布式事务的解决方案以及笔者基于可靠消息方案实现的分布式事务组件Lottor的原理,并展示了应用的控制台管理。...

aoho ⋅ 06/01 ⋅ 0

Spring Boot 2.0 新特性解读

点击上方“程序员小灰”,选择“置顶公众号” 有趣有内涵的文章第一时间送达! 本文转载自公众号 InfoQ 作者|翟永超编辑|郭蕾Spring Boot 2.0 来啦,有哪些新特性?升级吗?写在前面 北京时...

bjweimengshu ⋅ 04/13 ⋅ 0

SpringBoot详解(三)-Spring Boot的web开发

SpringBoot详解系列文章: SpringBoot详解(一)-快速入门 SpringBoot详解(二)-Spring Boot的核心 SpringBoot详解(三)-Spring Boot的web开发 SpringBoot详解(四)-优雅地处理日志 一、w...

CSDN_LQR ⋅ 2017/08/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

行政区划代码转为字典形式

原数据为: http://www.mca.gov.cn/article/sj/xzqh/2018/201804-12/201804-06041553.html 手动替换了一下格式,并使用下面的代码处理. # 输入格式s = """110000:北京市110101:东城区1101...

漫步海边小路 ⋅ 14分钟前 ⋅ 0

android apk 签名

创建key,需要用到keytool.exe (位于C:\Program Files\Java\jdk1.6.0_10\bin目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于C:\Program Files\Java\jdk1.6.0_10\bin目录下),把...

国仔饼 ⋅ 23分钟前 ⋅ 0

springcloud+jps+mybatis多数据库配置

多数据库配置 配置我们目录结构设置: config ---datasource ----jpa ----mybatis ----redis Datasource中是数据的相关配置 Jap中是springDatajpa的相关配置 Mybatis中是mybatis的相关配置 ...

大-智-若-愚 ⋅ 30分钟前 ⋅ 0

Spring mvc HandlerMapping 实现机制

概述 当DispatcherServlet接受到客户端的请求后,SpringMVC 通过 HandlerMapping 找到请求的Controller。 HandlerMapping 在这里起到路由的作用,负责找到请求的Controller。 Spring MVC 默认...

轨迹_ ⋅ 33分钟前 ⋅ 0

JavaScript零基础入门——(十)JavaScript的DOM基础

JavaScript零基础入门——(十)JavaScript的DOM基础 欢迎大家回到我们的JavaScript零基础入门,上一节课,我们了解了JavaScript中的函数,这一节课,我们来了解一下JavaScript的DOM。 第一节...

JandenMa ⋅ 今天 ⋅ 0

Weex起步

本教程假设你已经在你的本地环境安装了node 其实weex起步教程在 https://github.com/lilugirl/incubator-weex 项目说明文件中都已经有了,但为了有些同学看到英文秒变文盲,所以这里我重新写...

lilugirl ⋅ 今天 ⋅ 0

Jenkins实践1 之安装

1 下载 http://mirrors.jenkins.io/war/latest/jenkins.war 2 启动 java -jar jenkins.war 前提:安装jdk并配置环境变量 启动结果节选: ************************************************......

晨猫 ⋅ 今天 ⋅ 0

组合数学 1-2000 中,能被6或10整除的数的个数

1--2000 中,能被6或10整除的数的个数 利用集合的性质 能被6整除的个数 2000/6 = 333 能被10整除的个数 2000/10 = 200 能被6和10整除的个数 2000/30 = 66 能被6或10整除的个数 333+200-66 =...

阿豪boy ⋅ 今天 ⋅ 0

一篇文章学懂Shell脚本

Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合。 Shell可以直接使用在win/Unix/Linux上面,并且可以调用...

Jake_xun ⋅ 今天 ⋅ 0

大数据工程师需要精通算法吗,要达到一个什么程度呢?

机器学习是人工智能的一个重要分支,而机器学习下最重要的就是算法,本文讲述归纳了入门级的几个机器学习算法,加大数据学习群:716581014一起加入AI技术大本营。 1、监督学习算法 这个算法由...

董黎明 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部