Activiti 整合spring的时候,提供了一个自动部署的特性:
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
...
<property name="deploymentResources" value="classpath*:/org/activiti/spring/test/autodeployment/autodeploy.*.bpmn20.xml" />
</bean>
这样当每次启动web容器的时候就会把指定路径的流程资源文件部署到Activiti DB上。不过这样会产生一个问题,资源文件在没经过任何改动的情况下,特别是我们在做Testing的时候,还是会重新部署一个新的版本到DB上,这样会造成不别要的重复部署。我们在部署之前,应该先判断资源文件是否有改动过,如果有,才部署新版本到DB上。
实现这个功能很简单,只需要建立一个实现了 InitializingBean 接口的 spring bean,在afterPropertiesSet()方法里面进行判断和部署就可以了。
具体代码如下:
/**
* Automatic resource deployment.
*
* There is filtering in place that prevents duplicate deployments.Only when the
* resources actually have changed, will new deployments be deployed to the Activiti DB.
*
*/
public class WorkflowDeployer implements InitializingBean, ApplicationContextAware {
private static final Logger LOGGER = LoggerFactory.getLogger(WorkflowDeployer.class);
private Resource[] deploymentResources;
public void setDeploymentResources(Resource[] resources) {
this.deploymentResources = resources;
}
private String category;
public void setCategory(String category) {
this.category = category;
}
ApplicationContext appCtx;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.appCtx = applicationContext;
}
@Override
public void afterPropertiesSet() throws Exception {
if (category == null){
throw new FatalBeanException("Missing property: category");
}
if (deploymentResources != null) {
RepositoryService repositoryService = appCtx.getBean(RepositoryService.class);
for (Resource r : deploymentResources) {
String deploymentName = category + "_" + r.getFilename();
String resourceName = r.getFilename();
boolean doDeploy = true;
List<Deployment> deployments = repositoryService.createDeploymentQuery().deploymentName(deploymentName).orderByDeploymenTime().desc().list();
if (!deployments.isEmpty()) {
Deployment existing = deployments.get(0);
try {
InputStream in = repositoryService.getResourceAsStream(existing.getId(), resourceName);
if (in != null) {
File f = File.createTempFile("deployment","xml", new File(System.getProperty("java.io.tmpdir")));
f.deleteOnExit();
OutputStream out=new FileOutputStream(f);
IOUtils.copy(in,out);
in.close();
out.close();
doDeploy = (FileUtils.checksumCRC32(f) != FileUtils.checksumCRC32(r.getFile()));
}
else
throw new ActivitiException("Unable to read resource " + resourceName + ", input stream is null");
} catch (ActivitiException ex) {
//do nothing, simply re-deploy
LOGGER.error("Unable to read " + resourceName + " of deployment " + existing.getName() + ", id: " + existing.getId() + ", will re-deploy");
}
}
if (doDeploy) {
repositoryService.createDeployment()
.name(deploymentName)
.addInputStream(resourceName, r.getInputStream())
.deploy();
LOGGER.warn("Deployed BPMN20 resource " + r.getFilename());
}
}
}
}
}
然后在spring的配置文件里面配置好这个bean就可以了.
<bean id="workflowDeployer"
class="com.jeemis.workflow.deployer.WorkflowDeployer">
<property name="category" value="TEST" />
<property name="deploymentResources" value="classpath*:process/TEST.bpmn20.xml" />
</bean>
分享到:
相关推荐
2. * 获取默认的流程引擎实例 会自动读取activiti.cfg.xml文件 3. */ 4. private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();</span> 把绘制的流程定义图(我在上一篇博文上绘制过)...
②结合实际业务流程与Activity7整合,完成流程全自动化。 阅读建议:此资源以开发简单的人力资源系统,学习Activity的原理和机制和使用,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要...
Activiti5用户指南(中文版) 第一章、简介 ....................................................................................................................................................................
│ 02-ThreadLocal解决线程资源共享 │ 03-弹层组件layer使用. [- l; o" [6 F# U# ~. a7 c │ 04-用户分页查询-分析-同步请求方式 │ 05-用户分页查询-分析-同步请求代码开发 │ 06-用户分页查询-分页导航条# a1 W7 ...
ae是基于activiti explorer的流程设计器。 jabdp-designer是表单、业务设计器。 jabdp-jwp是业务模型的数据结构。 jabdp-platform是应用端。 jabdp快速开发平台部署说明 1.maven install部署jabdp-jwp到本地...
工作流管理: activiti工作流,在线配置流程,配合动态表单实现自定义流程.邮件代收: 代收指定邮箱的邮件框架功能全局restful json,前后分离.通用dao,service,controller类,增删改查直接继承即可.通用mybatis配置文件,...
它以 jar 的形式发布,部署容易,使用也较为便捷。 Java邮箱地址验证 jaev jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器...
技术点八:在线流程定义,采用开源Activiti流程引擎,实现在线画流程,自定义表单,表单挂接,业务流转,流程监控,流程跟踪,流程委托等 技术点九:自定义表单,支持用户自定义表单布局,支持单表、列表、Select\\...
6、流程引擎(Activiti)模型管理:功能包括模型新增、查看、删除、模型设计、模型部署。流程定义:功能包括流程图查看、流程挂起与激活、流程删除。请假管理:功能包括请假新增、编辑、查看、删除、导出、提交。...
它以 jar 的形式发布,部署容易,使用也较为便捷。 Java邮箱地址验证 jaev jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器...
Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个...
它以 jar 的形式发布,部署容易,使用也较为便捷。 Java邮箱地址验证 jaev jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器...
它以 jar 的形式发布,部署容易,使用也较为便捷。 Java邮箱地址验证 jaev jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器...
它以 jar 的形式发布,部署容易,使用也较为便捷。 Java邮箱地址验证 jaev jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器...
它以 jar 的形式发布,部署容易,使用也较为便捷。 Java邮箱地址验证 jaev jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器...
它以 jar 的形式发布,部署容易,使用也较为便捷。 Java邮箱地址验证 jaev jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器...
它以 jar 的形式发布,部署容易,使用也较为便捷。 Java邮箱地址验证 jaev jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器...
它以 jar 的形式发布,部署容易,使用也较为便捷。 Java邮箱地址验证 jaev jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器...
它以 jar 的形式发布,部署容易,使用也较为便捷。 Java邮箱地址验证 jaev jaev 是一个用来验证电子邮箱地址是否有效的 Java 项目。 Java的FastCGI网关 jFastCGI jFastCGI 是一个可以让Tomcat 之类的Servlet容器...