1.新建spring boot項目,添加依賴
<!-- activiti -->
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter</artifactId>//acti <version>7.1.0.M6</version> </dependency>
<!-- mysql -->
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>5.1.47</scope> </dependency>
<!-- activiti圖片生成 -->
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-image-generator</artifactId> <version>5.22.0</version> </dependency>
2.resources下新建文件夾processes,並添加bpmn文件

3.yml配置

spring: activiti: database-schema-update: true # 對所有表更新操作, 如不存在則創建 db-history-used: true # 使用歷史表 history-level: full # 保存歷史數據的最高級別 check-process-definitions: true # 校驗流程文件
4.增加配置類

activiti7默認集成了spring security框架,所以需要配置spring security
1和2兩個類是從activiti官網的案例項目里的,這里附上鏈接 https://github.com/Activiti/activiti-examples

主要是配置了兩個用戶
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @Configuration public class DemoApplicationConfiguration { private Logger logger = LoggerFactory.getLogger(DemoApplicationConfiguration.class); @Bean public UserDetailsService myUserDetailsService() { InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager(); String[][] usersGroupsAndRoles = { {"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(); } }
進行登陸的操作
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextImpl; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.stereotype.Component; import java.util.Collection; @Component public class SecurityUtil { private Logger logger = LoggerFactory.getLogger(SecurityUtil.class); @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"); } 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); } }
啟動類,在啟動項目的時候進行登錄,然后注入了一個DatasSource
@SpringBootApplication public class ActivitiApplication implements CommandLineRunner { @Autowired private SecurityUtil securityUtil; public static void main(String[] args) { SpringApplication.run(ActivitiApplication.class, args); } @Override public void run(String... args) throws Exception { securityUtil.logInAs("system"); } @Bean public DataSource dataSource() { DataSource dataSource = new DriverManagerDataSource("jdbc:mysql:///activiti?useUnicode=true&characterEncoding=utf8", "root", "root"); return dataSource; } }
5.啟動項目,可以看到數據庫已經創建了表

項目啟動時,在processes文件夾中的流程文件會自動部署,可以查看數據庫直接啟動流程,接下來的操作和activiti6的操作就相同了。

可以看到activiti7的id使用的是uuid
