以前在工作当中做过不少与工作流Activiti有关的工作,当时都是spring集成activiti5.22的项目,现在回过头去看,其实版本已经稍微老了,因此,基于先前的工作经验,决定用较新版本的技术来重新梳理下以前接触过的技术。

决定用springboot2.0+Activiti6.0来做实践总结。

第一步,在springboot项目pom.xml文件引入相关依赖:

1

2

3 mysql

4 mysql-connector-java

5 5.1.35

6

7

8

9 org.activiti

10 activiti-spring

11 6.0.0

12

13

14

15 com.fasterxml.jackson.core

16 jackson-core

17 2.9.5

18

第二步,建立Activiti的配置类

1 @Configuration

2 public class Activiticonfig {

3

4 /**

5 * 流程实例类,启动流程时创建

6 * @return

7 */

8 @Bean

9 public ProcessEngine processEngine(){

10 ProcessEngineConfiguration pro=ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();

11 pro.setJdbcDriver("com.mysql.jdbc.Driver");

12 pro.setJdbcUrl("jdbc:mysql://localhost:3306/example?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=UTC&nullCatalogMeansCurrent=true");

13 pro.setJdbcUsername("root");

14 pro.setJdbcPassword("root");

15 //避免发布的图片和xml中文出现乱码

16 pro.setActivityFontName("宋体");

17 pro.setLabelFontName("宋体");

18 pro.setAnnotationFontName("宋体");

19 pro.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);

20 return pro.buildProcessEngine();

21 }

22

23

24 /**

25 * 仓库服务类,用于管理bpmn文件与流程图片

26 * @return

27 */

28 @Bean

29 public RepositoryService repositoryService(){

30 return processEngine().getRepositoryService();

31 }

32

33 /**

34 * 流程运行服务类,用于获取流程执行相关信息

35 * @return

36 */

37 @Bean

38 public RuntimeService runtimeService(){

39 return processEngine().getRuntimeService();

40 }

41

42 /**

43 * 任务服务类,用户获取任务信息

44 * @return

45 */

46 @Bean

47 public TaskService taskService(){

48 return processEngine().getTaskService();

49 }

50

51

52 /**

53 * 获取正在运行或已经完成的流程实例历史信息

54 * @return

55 */

56 @Bean

57 public HistoryService historyService(){

58 return processEngine().getHistoryService();

59 }

60

61 /**

62 * 流程引擎的管理与维护

63 * @return

64 */

65 @Bean

66 public ManagementService managementService(){

67 return processEngine().getManagementService();

68 }

69

70 /**

71 * 创建、更新、删除,查询群组和用户

72 * @return

73 */

74 @Bean

75 public IdentityService identityService(){

76 return processEngine().getIdentityService();

77 }

78

79 }

在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工作流引擎做更多操作实践。

查看原文