Activiti工作流提供AutoDeployment,在项目启动时进行自动部署指定的xml工作流文件,实现方式有两种如下:
- activiti xml文件中进行配置
<bean id="processEngineConfiguration"
class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="dataSource" ref="activitiDataSource"/>
<property name="transactionManager" ref="transactionManager"/>
<property name="databaseSchemaUpdate" value="true"/>
<!-- 微软雅黑字体-->
<property name="activityFontName" value="微软雅黑"/>
<property name="labelFontName" value="微软雅黑"/>
<property name="annotationFontName" value="微软雅黑"/>
<!-- 自动部署流程 -->
<property name="deploymentResources" value="classpath:diagram/core_auto_deployment/*.bpmn20.xml"/>
<property name="deploymentResources">
<list>
<value>classpath:diagram/core_auto_deployment/*.bpmn20.xml</value>
</list>
</property>
</bean>
因为使用的activiti版本为5.22.0,查看源码得知,自动部署到数据库ACT_RE_PROCDEF
表中的名称统一为SpringAutoDeployment
,并且DGRM_RESOURCE_NAME_
字段值会存储文件的绝对路径,在后续的版本中已经针对该问题作出了修改。
- 自定义自动部署类,该方式可自由定义名称
<bean class="com.fangjie.activiti.core.config.AutoDeploymentCoreProcess" init-method="autoDeploymentResources">
<property name="repositoryService" ref="repositoryService"/>
<property name="deploymentResources">
<list>
<value>classpath:diagram/core_auto_deployment/*.bpmn20.xml</value>
</list>
</property>
</bean>
package com.fangjie.activiti.core.config;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.DeploymentBuilder;
import org.springframework.core.io.Resource;
import java.util.zip.ZipInputStream;
/**
* @author fangjie
* @Description: ${todo}
*/
public class AutoDeploymentCoreProcess {
protected RepositoryService repositoryService;
protected Resource[] deploymentResources = new Resource[0];
public void setRepositoryService(RepositoryService repositoryService) {
this.repositoryService = repositoryService;
}
public void setDeploymentResources(Resource[] deploymentResources) {
this.deploymentResources = deploymentResources;
}
void autoDeploymentResources() {
if (deploymentResources != null && deploymentResources.length > 0) {
for (Resource resource : deploymentResources) {
try {
//指定文件名称
String resourceName = "SpringAutoDeployment_" + resource.getFilename();
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment().enableDuplicateFiltering().name(resourceName);
if (resourceName.endsWith(".bar") || resourceName.endsWith(".zip") || resourceName.endsWith(".jar")) {
deploymentBuilder.addZipInputStream(new ZipInputStream(resource.getInputStream()));
} else {
deploymentBuilder.addInputStream(resourceName, resource.getInputStream());
}
deploymentBuilder.deploy();
} catch (Exception e) {
throw new ActivitiException("couldn't auto deploy resource '" + resource + "': " + e.getMessage(), e);
}
}
}
}
}