最近项目中用;到的开源流程引擎框架activiti,于是乎就有了下面的这篇文章
准备
版本信息如下:
- activiti 5.22.0
 - Springboot 1.5.14
 - Maven
 
maven配置
Springboot相关的依赖,我这里就直接省略,如果不清楚的同学google下吧
在pom文件中引入activiti与Springboot集成的依赖
<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring-boot-starter-basic</artifactId>
    <version>5.22.0</version>
</dependency>
数据源的配置
先要知道的是activiti流程引擎默认可以通过resource目录下的activiti.cfg.xml文件来配置数据源,这里也贴一下里面的配置文件信息
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
    <!-- 配置 ProcessEngineConfiguration  -->
    <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <!-- 配置数据库连接 -->
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/openwebflow?useUnicode=true&characterEncoding=utf8"></property>
        <property name="jdbcUsername" value="root"></property>
        <property name="jdbcPassword" value="root1"></property>
        <property name="jdbcUrl" value="${spring.datasource.url}"></property>
        <property name="jdbcUsername" value="${spring.datasource.username}"></property>
        <property name="jdbcPassword" value="${spring.datasource.password}"></property>
        
        <!-- 配置创建表策略 :没有表时,自动创建 -->
        <property name="databaseSchemaUpdate" value="true"></property>
        <!--设置字体-->
        <property name="activityFontName" value="宋体"/>
        <property name="labelFontName" value="宋体"/>
        <property name="annotationFontName" value="宋体"/>
    </bean>
</beans>
以上的xml配置不是我们要说的重点,既然用了Springboot,就不会存在xml文件,那我们如何配置数据源了
首先在applicant.properties中配置数据库的信息,
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3066/openwebflow?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=root
然后实现ProcessEngineConfigurationConfigurer接口,配置数据库连接信息,将其注入
@Component
public class ActivitiDataBaseConfig implements ProcessEngineConfigurationConfigurer {
    private static final Logger logger = LoggerFactory.getLogger(ActivitiDataBaseConfig.class);
    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;
    @Value("${spring.datasource.url}")
    private String url;
    @Value("${spring.datasource.username}")
    private String username;
    @Value("${spring.datasource.password}")
    private String password;
    @Override
    public void configure(SpringProcessEngineConfiguration springProcessEngineConfiguration) {
        springProcessEngineConfiguration.setJdbcDriver(driverClassName);
        springProcessEngineConfiguration.setJdbcUrl(url);
        springProcessEngineConfiguration.setJdbcUsername(username);
        springProcessEngineConfiguration.setJdbcPassword(password);
        springProcessEngineConfiguration.setActivityFontName("宋体");
        springProcessEngineConfiguration.setLabelFontName("宋体");
        springProcessEngineConfiguration.setAnnotationFontName("宋体");
        //设定数据库连接大小,默认为10
        springProcessEngineConfiguration.setJdbcMaxActiveConnections(300);
        //设置不启动定时任务,这里也可以解决启动后里面有很多定时任务的日志
        springProcessEngineConfiguration.setAsyncExecutorEnabled(false);
        springProcessEngineConfiguration.setAsyncExecutorActivate(false);
    }
}
遇到的坑
本以为这样就完美解决了,结果还是启动失败了,提示找不到classpath下的process文件夹,google后才知道,集成了Springboot的activiti流程引擎是会加载classpath下的bpmn文件,也就是流程配置的文件,那么如何在启动的时候不自动检查了,需要在application.properties属性文件中加入如下配置
# spring-activiti
# 自动部署验证设置:true-开启(默认)、false-关闭
spring.activiti.check-process-definitions=false
# activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建,true-表示创建或更新、false-关闭
spring.activiti.database-schema-update=false
#还有下面的几个配置也顺便的提下,虽然没用到
# asyncExecutorEnabled属性设置设置true后将代替那些老的Job executor
spring.activiti.async-executor-enabled=false 
spring.activiti.job-executor-activate=false
# asyncExecutorActivate是指activiti在流程引擎启动就激活AsyncExecutor,异步:true-开启(默认)、false-关闭
spring.activiti.async-executor-activate=true
# 使用自定义的mybatis-mapper
spring.activiti.custom-mybatis-mappers=
spring.activiti.custom-mybatis-xmlmappers=
最后在啰嗦一下,需要用到流程引擎的相关服务,直接注入进来就可以调用相关的方法了
    @Resource
    private ProcessEngine processEngine;
    @Resource
    private HistoryService historyService;
    @Resource
    private TaskService taskService;
    @Resource
    private RuntimeService runtimeService;
    @Resource
    private RepositoryService repositoryService;
以上,就是activiti与Springboot集成的全过程,有任何问题,欢迎留言,感谢阅读!!!