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; }
  1. 数据源和事物配置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的数据源自动配置的更多相关文章

  1. SpringBoot | 4.1 SpringMVC的自动配置

    目录 前言 1. SpringMVC框架的设计与流程 1.1 SpringMVC框架的示意图 1.2 SpringMVC的组件流程 2. *自动配置的源码分析 2.1 导入Web场景启动器 2.2 找 ...

  2. SpringBoot入门(四)——自动配置

    本文来自网易云社区 SpringBoot之所以能够快速构建项目,得益于它的2个新特性,一个是起步依赖前面已经介绍过,另外一个则是自动配置.起步依赖用于降低项目依赖的复杂度,自动配置负责减少人工配置的工 ...

  3. SpringBoot 2.X集成 jdbc自动配置原理探究

    前言 Springboot对于数据访问层,不管是 SQL还是 NOSQL,Spring Boot 底层都是采用 Spring Data 的方式统一处理.Spring Data 是 Spring 家族中 ...

  4. SpringBoot中对SpringMVC的自动配置

    https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#boot-features-developin ...

  5. springboot web项目创建及自动配置分析(thymeleaf+flyway)

    @ 目录 源码分析 webjars thymeleaf thymeleaf语法 springmvc 启动配置原理 集成flyway插件 springboot 创建web项目只需要引入对应的web-st ...

  6. 面试官:给我讲讲SpringBoot的依赖管理和自动配置?

    1.前言 从Spring转到SpringBoot的xdm应该都有这个感受,以前整合Spring + MyBatis + SpringMVC我们需要写一大堆的配置文件,堪称配置文件地狱,我们还要在pom ...

  7. springboot(八) 嵌入式Servlet容器自动配置原理和容器启动原理

    1.嵌入式Servlet容器自动配置原理 1.1 在spring-boot-autoconfigure-1.5.9.RELEASE.jar => springboot自动配置依赖 jar包下,E ...

  8. Spring Boot数据访问之数据源自动配置

    Spring Boot提供自动配置的数据访问,首先体验下,Spring Boot使用2.5.5版本: 1)导入坐标: 2.5.25版本支持8.0.26mysql数据库驱动.spring-boot-st ...

  9. 【SpringBoot】SpringBoot与SpringMVC自动配置(五)

    本文介绍SpringBoot对Spring MVC自动配置,SpringBoot自动配置原理可以参考:[SpringBoot]SpringBoot配置与单元测试(二) 首先新建一个SpringBoot ...

随机推荐

  1. 手机号测吉凶python代码

    根据数理数来测电话后四位吉凶: 数理数 解释批注 0点特殊.......大吉 1大展鸿图.可获成功吉 2一盛一衰.劳而无功凶 3蒸蒸日上.百事顺遂吉 4坎坷前途.苦难折磨凶 5生意欣荣.名利双收吉 6 ...

  2. 阿里云杨敬宇:5G时代,边缘计算将发挥更大价值

    “5G时代,边缘计算将发挥更大价值.”3月8日,阿里云边缘计算技术负责人杨敬宇向媒体表示,边缘计算作为5G时代的一项关键技术,未来将成为不可或缺的基础设施之一. 5G时代万物智联将真正成为现实,但对计 ...

  3. 【每日一linux命令7】用户及用户组

    一.查询用户及用户组相关命令 1.whoami 查询当前登录的用户名 2.groups 查询当前登录用户名所在的用户组 3.groups root 查询root用户名所在的用户组 二.怎么批量查看用户 ...

  4. 机器学习中的那些树——决策树(三、CART 树)

    前言 距上篇文章已经过了9个月 orz..趁着期末复习,把博客补一补.. 在前面的文章中介绍了决策树的 ID3,C4.5 算法.我们知道了 ID3 算法是基于各节点的信息增益的大小 \(\operat ...

  5. 安装 cx_Oracle

    1.下载 oracle client instant  和  sdk,  全部解压到 /opt/instantclient_11_2/ http://www.oracle.com/technetwor ...

  6. 替换文本:将文本文件中的所有src替换为dst

    题意: 将文本文件中的所有src替换为dst 方法一:使用String import java.io.File; import java.io.FileNotFoundException; impor ...

  7. 【JZOJ3640】【COCI2014】utrka

    Mission 2<=N<=300,2<=M<=N∗(N−1) Solution SPFA. 由于只是二元关系,所以条件随便写. 具体来说,如果是u⇒v. 若v的最大领先时间还 ...

  8. Python多线程在爬虫中的应用

    题记:作为测试工程师经常需要解决测试数据来源的问题,解决思路无非是三种:(1)直接从生产环境拷贝真实数据 (2)从互联网上爬取数据 (3)自己用脚本或者工具造数据.前段时间,为了获取更多的测试数据,笔 ...

  9. Spring MVC JSON自己定义类型转换

    版权声明:版权归博主全部.转载请带上本文链接.联系方式:abel533@gmail.com https://blog.csdn.net/isea533/article/details/28625071 ...

  10. pytest fixture 利用 params参数实现用例集合

    @pytest.fixture有一个params参数,接受一个列表,列表中每个数据都可以作为用例的输入.也就说有多少数据,就会形成多少用例.如下面例子,就形成3条用例 test_parametrizi ...