1 idea bpmn 乱码

配置文件的编码格式,修改启动的参数,设置idea自定义的 vm 参数。

2 idea 2019.1 以前的版本才支持 activiti 插件

要使用 idea 开发,需要 2019.1 前的版本。
idea 的 activiti 插件不支持导出图片。

3 idea 2019.1 使用 maven 3.6.3 无法下载 jar 依赖

2019.1 使用的 maven 插件不能与 3.6.3 兼容。需要改到 3.5.4 或以前;或者使用 idea 内置的 maven 3.
参考:
Maven3.6.3 在IntelliJ IDEA2019新版本中问题,Unable to import maven project: See logs for details

4 activiti7 使用 mysql 8 无法自动生成数据库表,但是可以手动使用Java方式生成。

没有细查,直接手动Java类,构建数据表模型。

  1. package com.demo.activiti7;
  2. import org.activiti.engine.ProcessEngineConfiguration;
  3. import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
  4. import org.activiti.engine.impl.db.DbSchemaCreate;
  5. import org.activiti.engine.impl.history.HistoryLevel;
  6. import org.junit.jupiter.api.Test;
  7. public class DatabaseInitTest {
  8. /**
  9. * 初始化数据库(activiti 引擎)
  10. *
  11. * 在Activiti7 的文档中我们只需要配置了database-schema-update: true,在程序启动时,就会自动的帮我们更新或者创建表结构。但是在实施过程中发现程序启动后没有帮我创建表结构(mysql5.7)
  12. *
  13. * activiti:
  14. * history-level: full
  15. * db-history-used: true
  16. * database-schema-update: true
  17. * 解决方案:
  18. * 在数据库连接地址后面加上
  19. *
  20. * nullCatalogMeansCurrent=true
  21. * 就可以了。
  22. */
  23. @Test
  24. public void initMySql() {
  25. // DbSchemaCreate
  26. ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration()
  27. .setDatabaseSchema("activiti7")
  28. .setJdbcUrl(
  29. "jdbc:mysql:///activiti_demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true")
  30. .setDbHistoryUsed(true)
  31. .setJdbcPassword("123456")
  32. .setJdbcUsername("root")
  33. .setJdbcDriver("com.mysql.cj.jdbc.Driver")
  34. .setHistoryLevel(HistoryLevel.FULL)
  35. .setDatabaseType("mysql")
  36. .setDatabaseSchemaUpdate(ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_CREATE)
  37. .buildProcessEngine();
  38. }
  39. }

5 activiti7 权限依赖 spring-securiity,排除如下

  • 排除:
  1. org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
  2. org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class
  3. org.activiti.core.common.spring.identity.config.ActivitiSpringIdentityAutoConfiguration.class ```java package com.hbte.sharp;

import org.activiti.api.runtime.shared.identity.UserGroupManager; import org.activiti.core.common.spring.identity.ActivitiUserGroupManagerImpl; import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScans; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.transaction.annotation.EnableTransactionManagement;

import springfox.documentation.swagger2.annotations.EnableSwagger2;

@SpringBootApplication(exclude = { org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class, org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class, org.activiti.core.common.spring.identity.config.ActivitiSpringIdentityAutoConfiguration.class }) //@SpringBootApplication @EnableSwagger2 @EnableTransactionManagement @MapperScan({“com.hbte.sharp.mapper”,”com.hbte.sharp.common.wf”}) //@MapperScans(value = {@MapperScan({“com.hbte.sharp.mapper”, “com.hbte.sharp.common.wf”}), @MapperScan({“”})}) public class SharpApplication {

  1. public static void main(String[] args) {
  2. SpringApplication.run(SharpApplication.class, args);
  3. }

}

  1. 排除 ActivitiSpringIdentityAutoConfiguration 后,需要自定义实现 org.activiti.api.runtime.shared.identity.UserGroupManager
  2. ```java
  3. package com.hbte.sharp.common.wf;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import java.util.Objects;
  7. import org.activiti.api.runtime.shared.identity.UserGroupManager;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.context.annotation.Configuration;
  12. import org.springframework.stereotype.Component;
  13. import org.springframework.util.CollectionUtils;
  14. @Component
  15. public class CustomedActivitiUserGroupManager implements UserGroupManager {
  16. private final static Logger LOG = LoggerFactory.getLogger(CustomedActivitiUserGroupManager.class);
  17. @Autowired
  18. private CustomedActivitiUserMapper customedActivitiUserMapper;
  19. @Override
  20. public List<String> getGroups() {
  21. return new ArrayList<>();
  22. // return customedActivitiUserMapper.selectAllRoles();
  23. }
  24. @Override
  25. public List<String> getUserGroups(String workNo) {
  26. List<String> result = new ArrayList<>();
  27. // List<CustomedActivitiUser> list = customedActivitiUserMapper.selectByWOrkNo(workNo);
  28. // if (CollectionUtils.isEmpty(list)) {
  29. // return result;
  30. // }
  31. // for (CustomedActivitiUser role : list) {
  32. // // 格式:platformId_roleCode_lineCode
  33. // result.add(String.format("%d_%s_%s", role.getPlatformId(), role.getRoleCode(),
  34. // Objects.isNull(role.getLineCode()) ? "" : role.getLineCode()));
  35. // }
  36. return result;
  37. }
  38. @Override
  39. public List<String> getUserRoles(String workNo) {
  40. return getUserGroups(workNo);
  41. }
  42. @Override
  43. public List<String> getUsers() {
  44. return new ArrayList<>();
  45. // return customedActivitiUserMapper.selectAllUsers();
  46. }
  47. }