第一步:添加项目依赖
1 2 3 4 5
| <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>6.0.0</version> </dependency>
|
第二步:配置activiti配置文件(springboot的配置文件)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| package com.jntech.config;
import com.jntech.common.utils.CustomLog; import org.activiti.engine.delegate.event.ActivitiEventListener; import org.activiti.spring.SpringProcessEngineConfiguration; import org.activiti.spring.boot.AbstractProcessEngineAutoConfiguration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.support.ResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.util.CollectionUtils;
import javax.sql.DataSource; import java.io.IOException; import java.util.*;
@Configuration
public class DataSourceActivitiConfig extends AbstractProcessEngineAutoConfiguration { @Autowired private ResourcePatternResolver resourceLoader;
@Bean(name = "activitiDataSource") @ConfigurationProperties(prefix = "spring.datasource.local")
public DataSource testDataSource() { return DataSourceBuilder.create().build(); }
@Bean(name = "activitiSqlSessionFactory")
public SpringProcessEngineConfiguration springProcessEngineConfiguration(@Qualifier("activitiDataSource") DataSource dataSource,@Qualifier("activitiTransactionManager") PlatformTransactionManager transactionManager) throws IOException { SpringProcessEngineConfiguration configuration = new SpringProcessEngineConfiguration(); configuration.setDataSource(dataSource); configuration.setTransactionManager(transactionManager); configuration.setDatabaseSchemaUpdate("true"); configuration.setAsyncExecutorActivate(true); configuration.setHistory("audit"); configuration.setCreateDiagramOnDeploy(true); configuration.setActivityFontName("\\u5b8b\\u4f53"); configuration.setLabelFontName("\\u5b8b\\u4f53");
List<Resource> procDefResources = discoverProcessDefinitionResources("classpath*:/processes/", Arrays.asList("**.bpmn20.xml", "**.bpmn"),true); configuration.setDeploymentResources(procDefResources.toArray(new Resource[procDefResources.size()]));
Map<String, List<ActivitiEventListener>> typedListeners = new HashMap<>();
configuration.setTypedEventListeners(typedListeners);
return configuration; }
@Bean(name = "activitiTransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("activitiDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); }
private List<Resource> discoverProcessDefinitionResources(String prefix, List<String> suffixes, boolean checkPDs) throws IOException { if (checkPDs) { List<Resource> result = new ArrayList(); for (String suffix : suffixes) { String path = prefix + suffix; Resource[] resources = resourceLoader.getResources(path); if (resources != null && resources.length > 0) { CollectionUtils.mergeArrayIntoCollection(resources, result); } } if (result.isEmpty()) { CustomLog.getInstance().createLogger("No process definitions were found for autodeployment"); } return result; } return new ArrayList<>(); }
}
|
databaseSchemaUpdate配置项可以设置流程引擎启动和关闭时数据库执行的策略。 databaseSchemaUpdate有以下四个值:
- false:false为默认值,设置为该值后,Activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配时,将在启动时抛出异常。
- true:设置为该值后,Activiti会对数据库中所有的表进行更新,如果表不存在,则Activiti会自动创建。
- create-drop:Activiti启动时,会执行数据库表的创建操作,在Activiti关闭时,执行数据库表的删除操作。
- drop-create:Activiti启动时,执行数据库表的删除操作在Activiti关闭时,会执行数据库表的创建操作。
Activiti提供了history-level属性对其进行配置。history-level属性有点像log4j的日志输出级别,该属性有以下四个值:
- none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。
- activity:级别高于none,保存流程实例与流程行为,其他数据不保存。
- audit:除activity级别会保存的数据外,还会保存全部的流程任务及其属性。audit为history的默认值。
- full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等。
第三步 多数据源下配置activiti数据源
(非多数据源请跳过)只需要借助springboot在配置activiti配置文件的时候制定数据源即可,详情可见“第二步”
第四步 将流程文件放入项目指定路径内
例如放入resources->processes->xxxx.xml
第五步 调用activiti提供的基础工具类实现流程操作
activiti仅仅提供了基础的针对流程对象的操作,我们可以利用基础功能进行封装,将流程创建,流程终止等功能完整自行封装,以提供对外能力。
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接,感谢各位看官!!!
本文出自:monkeyGeek
座右铭:生于忧患,死于安乐
欢迎志同道合的朋友一起交流、探讨!
monkeyGeek