Springboot2.0 集成Activiti6

本文讲述如何使用Springboot2.0 集成Activiti6 并配置自定义的数据源。

1.依赖

        <!-- Soringboot的版本 -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.0.RELEASE</version>
            <relativePath/>
        </parent>        
        
        <!-- Springboot 基础依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- 数据源相关 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.20</version>
        </dependency>
        
        <!-- activiti依赖 -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter-basic</artifactId>
            <version>6.0.0</version>
        </dependency>

2.Springboot yml文件配置

server:
  port: 8040

spring:
  application:
    name: activiti        #服务名称
  activiti:
    database-schema-update: true
    check-process-definitions: false  #校验bpmn文件是否存在

# 数据库配置     由环境决定
druid:
  datasource:
    url: jdbc:mysql://IP:3306/activiti?characterEncoding=UTF-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useUnicode=true   #数据库URL/库名
    driverClassName: com.mysql.jdbc.Driver  #JDBC驱动类
    username: root      #用户名
    password: root      #密码
    initialSize: 3        #初始化连接池大小
    minIdle: 3            #最小活跃数
    maxActive: 20          #最大活跃数
    maxWait: 5000          #最大等待超时时间
    timeBetweenEvictionRunsMillis: 50000  #每隔多少毫秒运行一次空闲连接回收器
    minEvictableIdleTimeMillis: 300000    #池中的连接空闲多少毫秒后被回收
    validationQuery: SELECT 1             #验证使用的SQL语句
    testWhileIdle: true             #指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.
    testOnBorrow: false             #借出连接时是否需要测试
    testOnReturn: false             #归还连接时是否需要测试
    filters: stat                   #监控

3.配置数据源及事务

@Configuration
public class DataSourceConfig {

    @Value("${druid.datasource.driverClassName}")
    private String driverClassName;
    @Value("${druid.datasource.url}")
    private String url;
    @Value("${druid.datasource.username}")
    private String userName;
    @Value("${druid.datasource.password}")
    private String password;
    @Value("${druid.datasource.initialSize}")
    private int initialSize;
    @Value("${druid.datasource.minIdle}")
    private int minIdle;
    @Value("${druid.datasource.maxActive}")
    private int maxActive;
    @Value("${druid.datasource.maxWait}")
    private long maxWait;
    @Value("${druid.datasource.timeBetweenEvictionRunsMillis}")
    private long timeBetweenEvictionRunsMillis;
    @Value("${druid.datasource.minEvictableIdleTimeMillis}")
    private long minEvictableIdleTimeMillis;
    @Value("${druid.datasource.validationQuery}")
    private String validationQuery;
    @Value("${druid.datasource.testWhileIdle}")
    private boolean testWhileIdle;
    @Value("${druid.datasource.testOnBorrow}")
    private boolean testOnBorrow;
    @Value("${druid.datasource.testOnReturn}")
    private boolean testOnReturn;
    @Value("${druid.datasource.filters}")
    private String filters;
    
    @Bean
    public DruidDataSource dataSource() throws SQLException {
        DruidDataSource dataSource = new DruidDataSource();

        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(userName);
        dataSource.setPassword(password);
        //配置初始化大小、最大、最小
        dataSource.setInitialSize(initialSize);
        dataSource.setMinIdle(minIdle);
        dataSource.setMaxActive(maxActive);
        //配置获取连接等待超时的时间
        dataSource.setMaxWait(maxWait);
        //配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
        //配置一个连接在池中最小生存的时间,单位是毫秒
        dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
        dataSource.setValidationQuery(validationQuery);
        dataSource.setTestWhileIdle(testWhileIdle);
        dataSource.setTestOnBorrow(testOnBorrow);
        dataSource.setTestOnReturn(testOnReturn);
        dataSource.setFilters(filters);
        return dataSource;
    }

    @Bean(name = "transactionManager")
    public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

4.Activiti配置,重新注入数据源以及事务

@Configuration
public class ActivitiConfig extends AbstractProcessEngineAutoConfiguration {
    @Bean
    public SpringProcessEngineConfiguration springProcessEngineConfiguration(
            DataSource dataSource,
            PlatformTransactionManager transactionManager,
            SpringAsyncExecutor springAsyncExecutor) throws IOException {
        return this.baseSpringProcessEngineConfiguration(dataSource, transactionManager, springAsyncExecutor);
    }
}

5.系统启动类

注意,系统没有配置Security 因此需要将SecurityAutoConfiguration去除,否则会报错

@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
public class ActivitiApplication {

    private static final Logger logger = LoggerFactory.getLogger(ActivitiApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(ActivitiApplication.class, args);
        logger.info("=========== activiti service started successfully ===========");
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章