springboot2 整合activiti-app (acti

作者: bbmm | 来源:发表于2019-10-27 18:41 被阅读0次

    最近项目需要在项目中嵌入activiti工作流并提供在线流程编辑设计功能,经过网上各种资料查询,都是基本的springboot整合activiti6,

    然后用activiti6提供的各种服务api实现自己的业务逻辑代码,

    但是我们都知道 activiti6下载包中包含activiti-app模块,该模块已经帮我们实现了基于web的流程设计器,那我们怎么将activiti-app整和到我们的 springboot项目中呢目前没有找到可参考的整合方案,于是本人经过尝试终于成功将activiti6中的activiti-app模块整合到目前springboot2.1.7版本的项目中,实现了项目的流程在线编辑功能。现将整合中比较重要的几点记录如下

    整合步骤:

    1:添加maven 包依赖:

    
    <dependencyManagement>
    
    <dependencies>
    
    <dependency>
    
    <groupId>org.springframework.boot</groupId>
    
    <artifactId>spring-boot-dependencies</artifactId>
    
    <version>2.1.7.RELEASE</version>
    
    <type>pom</type>
    
       <scope>import</scope>
    
    </dependency>
    
    <dependency>
    
    </dependencyManagement>
    
    <dependency>
    
    <groupId>org.springframework.boot</groupId>
    
    <artifactId>spring-boot-starter-web</artifactId>
    
    </dependency>
    
    <dependency>
    
    <groupId>org.springframework.boot</groupId>
    
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    
    </dependency>
    
    <dependency>
    
    <groupId>mysql</groupId>
    
    <artifactId>mysql-connector-java</artifactId>
    
    <scope>runtime</scope>
    
    </dependency>
    
    <dependency>
    
    <groupId>org.activiti</groupId>
    
    <artifactId>activiti-spring-boot-starter-basic</artifactId>
    
    <version>${activiti.version}</version>
    
    </dependency>
    
    <dependency>
    
    <groupId>org.activiti</groupId>
    
    <artifactId>activiti-app-rest</artifactId>
    
    <version>${activiti.version}</version>
    
    <exclusions>
    
    <exclusion>
    
                <groupId>org.slf4j</groupId>
    
                <artifactId>slf4j-api</artifactId>
    
          </exclusion>
    
    </exclusions>
    
    </dependency>
    
    

    注意:整合activiti-app 就是整合 activiti-app-rest,导入这个jar包后 可能会报log冲突相关的错误,需要再导入jar包的时候 排除 slf4j

    引入spring-boot-starter-data-jpa 因为activiti-app自带的相关功能 的持久化模块采用的jpa

    1. 数据源配置 activiti相关配置 留意注解
    
    spring:
    
      activiti:
    
        async-executor-activate: true
    
        database-schema-update: true 
    #设置为true时 启动项目自动为我们创建activiti相关的数据表
    
        check-process-definitions: false
    
        process-definition-location-prefix: classpath*:/processes/
    
      datasource:
    
        driver-class-name: com.mysql.cj.jdbc.Driver#/新的mysql驱动
    
    # 如果没有自动生成数据表 mysql连接后增加 nullCatalogMeansCurrent=true 具体原理可自行查看
    
        url: jdbc:mysql://xxxxxxxx:3306/xxx?characterEncoding=utf-8&serverTimezone=UTC&nullCatalogMeansCurrent=true
    
        username: xxx
    
        password: xxx
    
        type: com.zaxxer.hikari.HikariDataSource #连接池
    
        hikari:
    
          connection-test-query: SELECT 1
    
    #很多整合方案中 建议 liquibase.enabled=false,但是再整合activiti-app-rest 时需要设置为true因为activiti-app-rest 用 liquibase管理了一些流程设计相关的表
    
    #比如ACT_DE_MODEL等,liquibase需要的db.changelog-master.xml可以再activiti-app-rest中去找
    
    liquibase:
    
        enabled: true
    
        change-log: classpath:changelog.xml
    
    # activiti-app-rest 中 FileSystemContentStorage 的相关配置用来再文件系统中保存相关东西
    
    contentstorage:
    
      fs:
    
        rootFolder: /data
    
        createRoot: true
    
        depth: 4
    
        blockSize: 1024
    
    

    3.org.activiti.spring.boot.SecurityAutoConfiguration

    
    //启动时排除org.activiti.spring.boot.SecurityAutoConfiguration.class activiti中的这个类,这是activiti-app-rest默认使用的SpringSecurity 的相关配置类,去掉后,我们自己的项目必须要引入SpringSecurity  因为activiti-app-rest 获取当前用户是通过 SpringSecurity 的 authentication对象
    
    @SpringBootApplication(exclude = org.activiti.spring.boot.SecurityAutoConfiguration.class)
    
    public class DemoApplication {
    
    public static void main(String[] args) {
    
    SpringApplication.run(DemoApplication.class, args);
    
    }
    
    }
    
    //再自己的UserDetailsService loadUserByUsername 方法中封装ActivitiAppUser  这是 activiti-app-rest中的SpringSecurity User
    @Override
        public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
            UserEF userExists = userEfService.GetUserByAccount(username.trim());
            if(userExists != null) {
               List<org.activiti.engine.identity.User> activitUsers =   identityService.createUserQuery()
                .userId(userExists.getId().toString())
                .list();
                if(CollectionUtils.isNotEmpty(activitUsers)) {
                    
                    ActivitiAppUser acu = new ActivitiAppUser(activitUsers.get(0),username.trim(),AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
                    return acu;
                    //return new User(username.trim(),userExists.getUserPwd().trim(),AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
                    
                }
                
            }
            return null;
        }
    
    

    4.注意点

    
    需要将activiti-app-rest 中的控制器和 jpa 相关的dao Entity引入引入到项目中
    
    

    5.整合完成后,流程在线配置可以直接调用 activiti-app 中的配置功能包括界面和接口,但是activit-app中的表单配置功能有问题。
    1.创建的表单和流程关联后,流程发起时获取关联表单配置报错
    2.流程发布后 关联的表单无法发布,涉及的数据表数据为空 act_fo_form_deployment,act_fo_form_definition ,act_fo_* 等

    解决办法:

     引入包
     <dependency>
             <groupId>org.activiti</groupId>
             <artifactId>activiti-form-engine-configurator</artifactId>
             <version>${activiti.version}</version>
     </dependency>
     1.构建 FormEngineConfigurator 对象 
      2. 创建类继承ProcessEngineConfigurationConfigurer 接口
      3. 在ProcessEngineConfigurationConfigurer接口的实现类中将 FormEngineConfigurator对象注入到 
            SpringProcessEngineConfiguration 中 如下:
      
       @Component
    public class MiniProcessEngineConfigurationConfigurer implements ProcessEngineConfigurationConfigurer {
    
     @Autowired
     private FormEngineConfigurator formEngineConfigurator;
     
     @Override
     public void configure(SpringProcessEngineConfiguration processEngineConfiguration) {
         processEngineConfiguration.addConfigurator(formEngineConfigurator);
     
     }
    
    }      
    
    

    最后实现的效果如下:

    jietu.png

    参考文章

    相关文章

      网友评论

        本文标题:springboot2 整合activiti-app (acti

        本文链接:https://www.haomeiwen.com/subject/zrrmvctx.html