> 文档中心 > Activity7学习5—整合SpringBoot

Activity7学习5—整合SpringBoot

文章目录

  • 引入pom文件坐标
  • 添加SpringSecurity的相关配置类以及启动类
  • 编写配置文件application.yml
  • 定义一个流程用于测试
  • 编写测试类
    • 查看流程定义信息
    • 查询并完成任务
  • 总结

引入pom文件坐标

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version>    </parent>    <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.12</log4j.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.40</version> </dependency>    </dependencies>    <build> <plugins>     <plugin>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-maven-plugin</artifactId>     </plugin> </plugins>    </build>

添加SpringSecurity的相关配置类以及启动类

由于activity7和SpringSecurity是强耦合的所以在使用activity7进行web开发时要注意添加SecurityUtil 和DemoApplicationConfiguration 两个工具类,这两个类可以在官方提供的案例中找到,activity官网地址

@Componentpublic class SecurityUtil {    @Autowired    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"); } 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);    }}
@Configuration@EnableWebSecuritypublic class DemoApplicationConfiguration extends WebSecurityConfigurerAdapter {    private Logger logger = LoggerFactory.getLogger(DemoApplicationConfiguration.class);    @Override    @Autowired    public void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(myUserDetailsService());    }    @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"},  {"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;    }    @Override    protected void configure(HttpSecurity http) throws Exception { http  .csrf().disable()  .authorizeRequests()  .anyRequest()  .authenticated()  .and()  .httpBasic();    }    @Bean    public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder();    }}
@SpringBootApplicationpublic class ActivitiDemoApplication {    public static void main(String[] args) { SpringApplication.run(ActivitiDemoApplication.class,args);    }}

编写配置文件application.yml

spring:  datasource:    url: jdbc:mysql://localhost:3306/activitydb?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT    username : root    password : 123    driver-class-name: com.mysql.jdbc.Driver  activiti:    db-history-used: true

定义一个流程用于测试

在这里插入图片描述
注意candidate Groups必须得按照DemoApplicationConfiguration的规则设置,不然进行查询taskRuntime.tasks查不出数据。

编写测试类

查看流程定义信息

@RunWith(SpringRunner.class)@SpringBootTestpublic class ActivitiTest {    @Autowired    private ProcessRuntime processRuntime;//实现流程定义相关操作    @Autowired    private TaskRuntime taskRuntime;//任务操作相关类    @Autowired    private SecurityUtil securityUtil;//springSecurity相关工具类    /**     *  流程定义信息的查看     *      注意:activity7和SpringBoot整合后,会自动部署resources/processes/*.bpmn     */    @Test    public void testDefinition(){ //屏蔽AuthenticationCredentialsNotFoundException报错 securityUtil.logInAs("salaboy");//springSecurity的认证工作 //分页查询出流程定义信息 Page processDefinitionPage = processRuntime.processDefinitions  (Pageable.of(0, 10)); System.out.println("已部署流程个数:"+processDefinitionPage.getTotalItems()); //得到当前部署的每个流程的定义信息 for (Object pd : processDefinitionPage.getContent()){     System.out.println(pd); }    }}

查询并完成任务

    @Test    public void testTask(){ securityUtil.logInAs("salaboy"); Page<Task> taskPage = taskRuntime.tasks(Pageable.of(0, 10)); if(taskPage.getTotalItems()>0){     //说明有任务     for(Task task : taskPage.getContent()){  System.out.println("任务:"+task);  //拾取任务 candidate="activitiTeam"  Task claim = taskRuntime.claim(TaskPayloadBuilder   .claim()   .withTaskId(task.getId())   .build());  //执行任务  taskRuntime.complete(TaskPayloadBuilder.   complete().   withTaskId(task.getId()).   build());  System.out.println(task.getId()+"执行完成");     } }    }

总结

至此: 免费的Activity课程.就学完了。Activity是一个很好的工作流框架,虽然很老了,但其思想还是很值得学习的,主要是新的工作流引擎我没找到白嫖的课程。最后附上我学习时写的代码地址,希望可以帮助大家,如果可以给个关注谢谢!

B2C跨境电商