接管SpringBoot对Activiti的数据源自动配置


SpringBoot的自动配置真的让人又爱又恨,但还是爱更多一点。

SpringBoot想要帮我们自动配置好一切,但是有时候配置的却并不是我们需要的,甚至有时候会默默的坑我们。

我的项目是一个多数据源的项目(多数据源戳这里),其中有一个主数据源configDataSource,用来存放配置的库,我又新建了一个activitiDataSource,想要存放activiti的工作表。但是springboot却把configDataSource配置为了Activiti的库。

不想把activiti的自动配置关掉,毕竟用起来还是很方便的。那么只能更改springboot对activiti的默认配置了,经过实践可以使用如下方式:注释解释的很清楚了,就不啰嗦了。

/**
 * @author [email protected]
 * @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 {

/*
 * 配置数据源
 */
@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());
}

}

  • 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

你可能感兴趣的:(接管SpringBoot对Activiti的数据源自动配置)