以前在工作当中做过不少与工作流Activiti有关的工作,当时都是spring集成activiti5.22的项目,现在回过头去看,其实版本已经稍微老了,因此,基于先前的工作经验,决定用较新版本的技术来重新梳理下以前接触过的技术。
决定用springboot2.0+Activiti6.0来做实践总结。
第一步,在springboot项目pom.xml文件引入相关依赖:
<!--Activiti 工作流--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>5.1.35</scope></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>6.0.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.5</version></dependency>
第二步,建立Activiti的配置类
publicclassActiviticonfig { /*** 流程实例类,启动流程时创建* @return*/publicProcessEngineprocessEngine(){ ProcessEngineConfigurationpro=ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration(); pro.setJdbcDriver("com.mysql.jdbc.Driver"); pro.setJdbcUrl("jdbc:mysql://localhost:3306/example?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=UTC&nullCatalogMeansCurrent=true"); pro.setJdbcUsername("root"); pro.setJdbcPassword("root"); //避免发布的图片和xml中文出现乱码pro.setActivityFontName("宋体"); pro.setLabelFontName("宋体"); pro.setAnnotationFontName("宋体"); pro.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); returnpro.buildProcessEngine(); } /*** 仓库服务类,用于管理bpmn文件与流程图片* @return*/publicRepositoryServicerepositoryService(){ returnprocessEngine().getRepositoryService(); } /*** 流程运行服务类,用于获取流程执行相关信息* @return*/publicRuntimeServiceruntimeService(){ returnprocessEngine().getRuntimeService(); } /*** 任务服务类,用户获取任务信息* @return*/publicTaskServicetaskService(){ returnprocessEngine().getTaskService(); } /*** 获取正在运行或已经完成的流程实例历史信息* @return*/publicHistoryServicehistoryService(){ returnprocessEngine().getHistoryService(); } /*** 流程引擎的管理与维护* @return*/publicManagementServicemanagementService(){ returnprocessEngine().getManagementService(); } /*** 创建、更新、删除,查询群组和用户* @return*/publicIdentityServiceidentityService(){ returnprocessEngine().getIdentityService(); } }
在springboot工程里简单加完这些配置后,启动项目,原以为可以正常生成Activi6.0工作流自带的28张表,但这时出现了一堆错误:
### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table 'example.act_ge_property' doesn't exist
### The error may exist in org/activiti/db/mapping/entity/Property.xml
### The error may involve org.activiti.engine.impl.persistence.entity.PropertyEntityImpl.selectProperty-Inline
### The error occurred while setting parameters
### SQL: select * from ACT_GE_PROPERTY where NAME_ = ?
### Cause: java.sql.SQLSyntaxErrorException: Table 'example.act_ge_property' doesn't exist
出现这种问题主要是因为MySql的版本问题,在连接mysql的url后边加一个&nullCatalogMeansCurrent=true即可解决。
再次运行后,成功创建了28张Activiti自带的数据表——
接下来,将基于该搭建,对Activiti工作流引擎做更多操作实践。