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>
分享到:
相关推荐
理解并熟练掌握流程图的部署和查询是使用Activiti进行业务流程自动化开发的基础。 总之,Activiti流程图的部署和操作涉及到流程定义的生命周期管理,包括创建、部署、查询和更新等步骤。正确地部署和操作流程图能够...
Activiti7是一款强大的开源工作流引擎,用于在Java应用程序中实现业务流程自动化。它基于模型驱动的架构,允许开发者通过BPMN 2.0标准来设计、部署和执行流程。这个“Activiti7(流程引擎)简单笔记”很可能是作者在...
Activiti工作流引擎是一款强大的开源工作流解决方案,它基于模型驱动的架构,旨在为企业...而提供的"Activiti整合流程设计器"压缩包文件很可能包含了示例代码、配置文件和教程资源,有助于进一步学习和实践这个主题。
这个"activiti5.9 请假流程例子 eclipse项目"提供了基于Activiti 5.9版本的一个实际应用场景——请假流程,帮助开发者理解和学习如何在Eclipse环境中构建与部署流程应用。 【描述】"资源全免费,博客有教程" 该项目...
在Activiti中部署流程图主要有以下几种方式: **1. 使用Activiti Designer工具设计的流程图** - **文件类型:** 设计过程中会产生`.activiti`、`.bpmn20.xml`以及`.png`三种文件。 - **部署策略:** 需要同时部署`....
Activiti 是一个开源的工作流程引擎,它主要用于自动化业务流程,特别是在企业级应用中。...通过深入研究这些资源,开发者能够熟练掌握Activiti的工作原理,从而在项目中有效地利用它来提升业务流程的自动化水平。
- **资源的自动部署**:自动部署流程定义文件。 - **单元测试**:Spring环境下的单元测试技巧。 - **基于注解的配置**:使用Spring注解进行配置。 - **JPA和Hibernate 4.2.x**:与持久化框架的集成方式。 #### 6. ...
流程引擎在IT行业中是用于自动化业务流程的核心组件,它们能够帮助开发者设计、执行和管理复杂的业务流程。在本压缩包中,我们包含了两个知名的流程引擎——Flowable 6.4.2和Activiti 6.0。这两个引擎都是基于Java的...
10. **部署与版本管理**:Activiti 支持多版本流程部署,允许同时运行不同版本的同一流程,便于进行版本管理和流程升级。 综上所述,Activiti-5.22.0 是一个强大的工作流引擎,提供了全面的业务流程管理和自动化...
Activiti 是一个开源的...总结来说,Activiti 的流程图查看涉及仓库服务的使用,包括获取部署资源、筛选流程图资源、读取资源流以及在Web环境中展示这些资源。理解这些步骤对于理解和调试 Activiti 流程实例至关重要。
Activiti 是一个开源的工作流程引擎,它主要用于自动化业务流程,特别是在企业级应用中。这个5.22.0版本是Activiti的一个稳定发行版,包含了该框架的一系列增强功能和修复的bug。以下是对Activiti 5.22.0及其相关...
- **部署流程**:将流程定义XML文件部署到Activiti流程引擎。 - **启动流程实例**:通过Runtime Service启动流程实例,并可能传入初始变量。 - **处理任务**:通过Task Service进行任务的操作,如查询、领取、...
通过对Activiti工作流的学习和总结,我们可以看出,Activiti不仅是一款功能强大的工作流引擎,还具备良好的扩展性和易用性,非常适合希望快速实现业务流程自动化的组织使用。无论是对于初学者还是经验丰富的开发者来...
它提供了一套全面的工具和技术,帮助企业实现流程自动化,提高工作效率,并简化IT与业务之间的协作。 在 Activiti 6.0 版本中,有几个核心的特性值得关注: 1. **流程建模**:Activiti 提供了基于BPMN 2.0标准的...
Activiti 是一个开源的工作流和业务流程管理(BPM)平台,它被广泛应用于企业级应用中,以实现流程自动化和提升工作效率。标题中的 "activiti 5.8资源包" 指的是 Activiti 框架的第5.8版本的相关资料集合,这个资源...
总的来说,activiti-5.18.0 官方资源为开发者提供了一个完整的环境,可以开始探索和实现基于 Activiti 的流程自动化解决方案。通过研究这些文件和文档,开发者可以学习如何设计复杂的业务流程,如何集成 Activiti 到...
Activiti5 是一款开源的工作流引擎,用于在企业应用中实现业务流程自动化。这个"Activiti5 请假流程 demo 代码示例"是为初学者和开发者提供的一种实践指南,展示了如何利用 Activiti5 实现一个典型的请假流程。在这...
Activiti 是一个开源的工作流和业务自动化引擎,它在企业级应用中被广泛使用,用于构建灵活、可扩展的业务流程。在这个特定的版本——activiti-5.22.0,我们关注的是一个用于流程设计的官方工具,即 activiti-...
* 资源的自动部署 部署业务文档 部署业务文档是 Activiti 的一个重要特性,用于将流程定义部署到 Activiti 引擎中。 REST API Activiti 的 REST API 提供了强大的流程管理和自动化功能,包括: * 通用 ...