• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    SpringBoot整合Activiti7的实现代码

    Activiti7发布正式版之后,它与SpringBoot2.x已经完全支持整合开发。我们可以将Activiti7与SpringBoot整合开发的坐标引入到工程中,从而达到SpringBoot支持Activti7整合。

    1.使用IDEA创建SpringBoot项目

    在工程的pom.xml文件中引入相关的依赖,具体依赖如下所示

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
      </parent>
      <groupId>com.example</groupId>
      <artifactId>activiti</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <name>activiti</name>
      <description>Demo project for Spring Boot</description>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
    
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
        </dependency>
    
        <dependency>
          <groupId>org.activiti</groupId>
          <artifactId>activiti-spring-boot-starter</artifactId>
          <version>7.0.0.Beta2</version>
        </dependency>
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.4.5</version>
        </dependency>
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.27</version>
        </dependency>
        <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <optional>true</optional>
        </dependency>
      </dependencies>
    
      <build>
        <plugins>
          <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    
    </project>

    2.application.yml文件配置

    为了能够实现Activiti7生成的表放到Mysql数据库中,需要在配置文件application.yml中添加相关的配置

    server:
     port: 8085
    spring:
     application:
      name: spring-activiti
     datasource:
      url: jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT&nullCatalogMeansCurrent=true
      username: root
      password: 123456
      driver-class-name: com.mysql.jdbc.Driver
     activiti:
      #1.flase: 默认值。activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常
      #2.true: activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建
      #3.create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)
      #4.drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)
      database-schema-update: true
      #检测历史表是否存在
      db-history-used: true
      #记录历史等级 可配置的历史级别有none, activity, audit, full
      history-level: full
      #校验流程文件,默认校验resources下的processes文件夹里的流程文件
      check-process-definitions: false
    

    3.添加SpringSecurity安全框架整合配置

    Activiti7与SpringBoot整合后,默认情况下,集成了SpringSecurity安全框架,这样我们就要去准备SpringSecurity整合进来的相关用户权限配置信息

    1)添加SecurityUtil类

    为了能够快速实现SpringSecurity安全框架的配置,所添加的一个组件。

    @Component
    public class SecurityUtil {
    
      private Logger logger = LoggerFactory.getLogger(SecurityUtil.class);
    
      @Autowired
      @Qualifier("myUserDetailsService")
      private UserDetailsService userDetailsService;
    
      public void logInAs(String username) {
    
        UserDetails user = userDetailsService.loadUserByUsername(username);
        if (user == null) {
          throw new IllegalStateException("User " + username + " doesn't exist, please provide a valid user");
        }
        logger.info("> Logged in as: " + username);
        SecurityContextHolder.setContext(new SecurityContextImpl(new Authentication() {
          @Override
          public Collection<? extends GrantedAuthority> getAuthorities() {
            return user.getAuthorities();
          }
    
          @Override
          public Object getCredentials() {
            return user.getPassword();
          }
    
          @Override
          public Object getDetails() {
            return user;
          }
    
          @Override
          public Object getPrincipal() {
            return user;
          }
    
          @Override
          public boolean isAuthenticated() {
            return true;
          }
    
          @Override
          public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
    
          }
    
          @Override
          public String getName() {
            return user.getUsername();
          }
        }));
        org.activiti.engine.impl.identity.Authentication.setAuthenticatedUserId(username);
      }
    }
    
    

    这个类可以从Activiti7官方提供的Example中找到。

    2)添加DemoApplicationConfig类

    它的作用是为了实现SpringSecurity框架的用户权限的配置,这样我们就可以在系统中使用用户权限信息

    @Configuration
    public class DemoApplicationConfiguration {
    
      private Logger logger = LoggerFactory.getLogger(DemoApplicationConfiguration.class);
    
      @Bean
      public UserDetailsService myUserDetailsService() {
    
        InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager();
    
        String[][] usersGroupsAndRoles = {
            {"salaboy", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
            {"ryandawsonuk", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
            {"erdemedeiros", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
            {"other", "password", "ROLE_ACTIVITI_USER", "GROUP_otherTeam"},
            {"system", "password", "ROLE_ACTIVITI_USER"},
            {"admin", "password", "ROLE_ACTIVITI_ADMIN"},
        };
    
        for (String[] user : usersGroupsAndRoles) {
          List<String> authoritiesStrings = Arrays.asList(Arrays.copyOfRange(user, 2, user.length));
          logger.info("> Registering new user: " + user[0] + " with the following Authorities[" + authoritiesStrings + "]");
          inMemoryUserDetailsManager.createUser(new User(user[0], passwordEncoder().encode(user[1]),
              authoritiesStrings.stream().map(s -> new SimpleGrantedAuthority(s)).collect(Collectors.toList())));
        }
    
    
        return inMemoryUserDetailsManager;
      }
    
    
      @Bean
      public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
      }
    
    }
    
    

    4)创建测试类

    @SpringBootTest
    @Slf4j
    class ActivitiApplicationTests {
    
      @Autowired
      private ProcessEngine processEngine;
    
      /**
       * 流程定义的部署
       */
      @Test
      public void createDeploy() { 
        RepositoryService repositoryService = processEngine.getRepositoryService();
    
        Deployment deployment = repositoryService.createDeployment()
            .addClasspathResource("diagram/holiday.bpmn")//添加bpmn资源
            .addClasspathResource("diagram/holiday.png")
            .name("请假申请单流程")
            .deploy(); 
            
        log.info("流程部署id:" + deployment.getName());
        log.info("流程部署名称:" + deployment.getId());
      }
    }
    
    

    运行结果:

    遇到的问题:

    1)历史表默认不会生成,需在application.yml中配置

    spring:
     activiti:
      #检测历史表是否存在
      db-history-used: true
      #记录历史等级 可配置的历史级别有none, activity, audit, full
      history-level: full
    

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    上一篇:在centos7上搭建mysql主从服务器的方法(图文教程)
    下一篇:详解CentOS7 安装 MariaDB 10.2.4的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    SpringBoot整合Activiti7的实现代码 SpringBoot,整合,Activiti7,的,