接管SpringBoot对Activiti的数据源自动配置
SpringBoot的自动配置真的让人又爱又恨,但还是爱更多一点。
SpringBoot想要帮我们自动配置好一切,但是有时候配置的却并不是我们需要的,甚至有时候会默默的坑我们。
我的项目是一个多数据源的项目(多数据源戳这里),其中有一个主数据源configDataSource,用来存放配置的库,我又新建了一个activitiDataSource,想要存放activiti的工作表。但是springboot却把configDataSource配置为了Activiti的库。
不想把activiti的自动配置关掉,毕竟用起来还是很方便的。那么只能更改springboot对activiti的默认配置了,经过实践可以使用如下方式:注释解释的很清楚了,就不啰嗦了。
/**
* @author kingboy--KingBoyWorld@163.com
* @date 2017/8/30 上午12:54
* @desc Activiti的数据和事物配置.
*/
@Configuration//声名为配置类,继承Activiti抽象配置类
public class ActivitiConfig extends AbstractProcessEngineAutoConfiguration {
@Resource
DataSource activitiDataSource;//注入配置好的数据源
@Resource
PlatformTransactionManager activitiTransactionManager;//注入配置好的事物管理器
//注入数据源和事务管理器
@Bean
public SpringProcessEngineConfiguration springProcessEngineConfiguration(
SpringAsyncExecutor springAsyncExecutor) throws IOException {
return this.baseSpringProcessEngineConfiguration(activitiDataSource, activitiTransactionManager, springAsyncExecutor);
}
}
到这里就搞定了,springboot就会使用我们声名的数据源来配置Activiti了。
下面附上我的数据源和事物管理器的配置。
配置文件:
#-----------------------------------数据源配置-----------------------------
#activiti数据源
spring.datasource.activiti.url=jdbc:mysql://localhost:3306/activiti?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.activiti.username=root
spring.datasource.activiti.password=123456
spring.datasource.activiti.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.activiti.maxActive=20
spring.datasource.activiti.initialSize=5
spring.datasource.activiti.minIdle=5
spring.datasource.activiti.maxWait=60000
spring.datasource.activiti.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.activiti.timeBetweenEvictionRunsMillis=60000
spring.datasource.activiti.minEvictableIdleTimeMillis=300000
spring.datasource.activiti.poolPreparedStatements=true
配置类
1.属性读取 ActivitiDataSourceProperties.java
package com.kingboy.activiti.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author kingboy
* @date 2017/6/19 下午5:15
* @desc configuration的数据池属性
*/
@ConfigurationProperties(prefix = "spring.datasource.activiti")
@Data
@Component
public class ActivitiDataSourceProperties {
private String url;
private String username;
private String password;
private String driverClassName;
private Integer maxActive;
private Integer initialSize;
private Integer minIdle;
private Integer maxWait;
private Integer maxPoolPreparedStatementPerConnectionSize;
private Integer timeBetweenEvictionRunsMillis;
private Integer minEvictableIdleTimeMillis;
private Boolean poolPreparedStatements;
}
- 数据源和事物配置ActivitiJPAConfig.java
/**
* @author kingboy
* @date 2017/6/18 下午11:13
* @desc 数据源配置
*/
@Configuration
@EnableTransactionManagement//开启事物管理
@EnableJpaRepositories(//自定义数据管理的配置
//指定EntityManager的创建工厂Bean
entityManagerFactoryRef = "activitiEntityManagerFactory",
//指定事物管理的Bean
transactionManagerRef = "activitiTransactionManager",
//指定管理的实体位置
basePackages = {"com.kingboy.activiti.domain"})
public class ActivitiJPAConfig {
/*
* 配置数据源
*/
@Bean
public DataSource activitiDataSource() {
DruidDataSource dataSource = new DruidDataSource();
//设置数据源的属性
setDruidProperties(dataSource);
return dataSource;
}
//注入数据源配置信息
@Autowired
ActivitiDataSourceProperties config;
//设置数据源的属性的方法
private void setDruidProperties(DruidDataSource dataSource) {
dataSource.setUrl(config.getUrl());
dataSource.setUsername(config.getUsername());
dataSource.setPassword(config.getPassword());
dataSource.setDriverClassName(config.getDriverClassName());
dataSource.setMaxActive(config.getMaxActive());
dataSource.setInitialSize(config.getInitialSize());
dataSource.setMinIdle(config.getMinIdle());
dataSource.setMaxWait(config.getMaxWait());
dataSource.setMaxPoolPreparedStatementPerConnectionSize(config.getMaxPoolPreparedStatementPerConnectionSize());
dataSource.setTimeBetweenEvictionRunsMillis(config.getTimeBetweenEvictionRunsMillis());
dataSource.setMinEvictableIdleTimeMillis(config.getMinEvictableIdleTimeMillis());
dataSource.setPoolPreparedStatements(config.getPoolPreparedStatements());
}
/*
* 配置实体管理工厂Bean
*/
@Bean
public LocalContainerEntityManagerFactoryBean activitiEntityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder
.dataSource(activitiDataSource())
.packages("com.kingboy.activiti.domain")//设置实体类所在位置
.persistenceUnit("activiti")
.properties(getProperties(activitiDataSource()))//设置hibernate通用配置
.build();
}
//注入spring自带的jpa属性类
@Autowired
private JpaProperties jpaProperties;
/*
*拿到hibernate的通用配置
*/
private Map<String, String> getProperties(DataSource dataSource) {
return jpaProperties.getHibernateProperties(dataSource);
}
/*
*配置事物管理的Bean
*/
@Bean
public PlatformTransactionManager activitiTransactionManager(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(activitiEntityManagerFactory(builder).getObject());
}
}
原文地址:https://blog.csdn.net/KingBoyWorld/article/details/77703565
接管SpringBoot对Activiti的数据源自动配置的更多相关文章
- SpringBoot | 4.1 SpringMVC的自动配置
目录 前言 1. SpringMVC框架的设计与流程 1.1 SpringMVC框架的示意图 1.2 SpringMVC的组件流程 2. *自动配置的源码分析 2.1 导入Web场景启动器 2.2 找 ...
- SpringBoot入门(四)——自动配置
本文来自网易云社区 SpringBoot之所以能够快速构建项目,得益于它的2个新特性,一个是起步依赖前面已经介绍过,另外一个则是自动配置.起步依赖用于降低项目依赖的复杂度,自动配置负责减少人工配置的工 ...
- SpringBoot 2.X集成 jdbc自动配置原理探究
前言 Springboot对于数据访问层,不管是 SQL还是 NOSQL,Spring Boot 底层都是采用 Spring Data 的方式统一处理.Spring Data 是 Spring 家族中 ...
- SpringBoot中对SpringMVC的自动配置
https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#boot-features-developin ...
- springboot web项目创建及自动配置分析(thymeleaf+flyway)
@ 目录 源码分析 webjars thymeleaf thymeleaf语法 springmvc 启动配置原理 集成flyway插件 springboot 创建web项目只需要引入对应的web-st ...
- 面试官:给我讲讲SpringBoot的依赖管理和自动配置?
1.前言 从Spring转到SpringBoot的xdm应该都有这个感受,以前整合Spring + MyBatis + SpringMVC我们需要写一大堆的配置文件,堪称配置文件地狱,我们还要在pom ...
- springboot(八) 嵌入式Servlet容器自动配置原理和容器启动原理
1.嵌入式Servlet容器自动配置原理 1.1 在spring-boot-autoconfigure-1.5.9.RELEASE.jar => springboot自动配置依赖 jar包下,E ...
- Spring Boot数据访问之数据源自动配置
Spring Boot提供自动配置的数据访问,首先体验下,Spring Boot使用2.5.5版本: 1)导入坐标: 2.5.25版本支持8.0.26mysql数据库驱动.spring-boot-st ...
- 【SpringBoot】SpringBoot与SpringMVC自动配置(五)
本文介绍SpringBoot对Spring MVC自动配置,SpringBoot自动配置原理可以参考:[SpringBoot]SpringBoot配置与单元测试(二) 首先新建一个SpringBoot ...
随机推荐
- Leetcode657.Robot Return to Origin机器人能否返回原点
在二维平面上,有一个机器人从原点 (0, 0) 开始.给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束. 移动顺序由字符串表示.字符 move[i] 表示其第 i 次移动.机器 ...
- 如何制作可以在 MaxCompute 上使用的 crcmod
之前我们介绍过在 PyODPS DataFrame 中使用三方包.对于二进制包而言,MaxCompute 要求使用包名包含 cp27-cp27m 的 Wheel 包.但对于部分长时间未更新的包,例如 ...
- Vue-- vue-preview(图片查看器)的使用步骤:
vue-preview的使用步骤: )下载 )配置:找到配置文件加入: { test: /vue-preview.src.*?js$/, loader: 'babel-loader' }, 在处理ur ...
- js实现自由落体
实现自由落体运动需要理解的几个简单属性: clientHeight:浏览器客户端整体高度 offsetHeight:对象(比如div)的高度 offsetTop:对象离客户端最顶端的距离 <!d ...
- Winform实现调用asp.net数据接口实例
本文实例讲述了Winform实现调用asp.net数据接口的方法,分享给大家供大家参考.具体实现方法如下: 一.问题: 最近一个WPF项目需要改写成android项目,思路是在asp.net项目中编写 ...
- ASP.NET自定义控件组件开发 第一章 第一章:从一个简单的控件谈起
第一章:从一个简单的控件谈起 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第三 ...
- Session学习小结
前言: 1.我们在学习一项技术的时候,首先应该是什么时候会用到这项技术.这次学习session也是如此,一般的web项目中都有用户的存在,有用户那么就有了用户的管理,而用户往往是存在于session中 ...
- TYVJ1340 送礼物
P1340 送礼物 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 作为惩罚,GY被遣送去帮助某神牛给女生送礼物(GY:貌似是个好差事)但是在GY看到礼物之后 ...
- Leetcode680.Valid Palindrome II验证回文字符串2
给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串. 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "abca" 输出: ...
- Leetcode705.Design HashSet设置哈希集合
不使用任何内建的哈希表库设计一个哈希集合 具体地说,你的设计应该包含以下的功能 add(value):向哈希集合中插入一个值. contains(value) :返回哈希集合中是否存在这个值. rem ...