接管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);
    }
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

到这里就搞定了,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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

配置类

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  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 {

<span class="hljs-comment">/*
 * 配置数据源
 */</span>
<span class="hljs-annotation">@Bean</span>
<span class="hljs-keyword">public</span> DataSource <span class="hljs-title">activitiDataSource</span>() {
    DruidDataSource dataSource = <span class="hljs-keyword">new</span> DruidDataSource();
    <span class="hljs-comment">//设置数据源的属性</span>
    setDruidProperties(dataSource);
    <span class="hljs-keyword">return</span> dataSource;
}


<span class="hljs-comment">//注入数据源配置信息</span>
<span class="hljs-annotation">@Autowired</span>
ActivitiDataSourceProperties config;

<span class="hljs-comment">//设置数据源的属性的方法</span>
<span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setDruidProperties</span>(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());
}

<span class="hljs-comment">/*
 * 配置实体管理工厂Bean
 */</span>
<span class="hljs-annotation">@Bean</span>
<span class="hljs-keyword">public</span> LocalContainerEntityManagerFactoryBean <span class="hljs-title">activitiEntityManagerFactory</span>(EntityManagerFactoryBuilder builder) {
    <span class="hljs-keyword">return</span> builder
            .dataSource(activitiDataSource())
            .packages(<span class="hljs-string">"com.kingboy.activiti.domain"</span>)<span class="hljs-comment">//设置实体类所在位置</span>
            .persistenceUnit(<span class="hljs-string">"activiti"</span>)
            .properties(getProperties(activitiDataSource()))<span class="hljs-comment">//设置hibernate通用配置</span>
            .build();
}

<span class="hljs-comment">//注入spring自带的jpa属性类</span>
<span class="hljs-annotation">@Autowired</span>
<span class="hljs-keyword">private</span> JpaProperties jpaProperties;

<span class="hljs-comment">/*
 *拿到hibernate的通用配置
 */</span>
<span class="hljs-keyword">private</span> Map&lt;String, String&gt; <span class="hljs-title">getProperties</span>(DataSource dataSource) {
    <span class="hljs-keyword">return</span> jpaProperties.getHibernateProperties(dataSource);
}

<span class="hljs-comment">/*
 *配置事物管理的Bean
 */</span>
<span class="hljs-annotation">@Bean</span>
<span class="hljs-keyword">public</span> PlatformTransactionManager <span class="hljs-title">activitiTransactionManager</span>(EntityManagerFactoryBuilder builder) {
    <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> JpaTransactionManager(activitiEntityManagerFactory(builder).getObject());
}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值