Spring-boot整合Activiti7
pom.xml
<properties>
<maven.compiler.source>15</maven.compiler.source>
<maven.compiler.target>15</maven.compiler.target>
<activiti.version>7.1.0.M6</activiti.version>
<mybatis-plus.version>3.3.1</mybatis-plus.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.6</version>
<relativePath/>
</parent>
<dependencies>
<!-- Activiti -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- java繪製activiti流程圖 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-image-generator</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- activiti json轉換器-->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-json-converter</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- svg轉png圖片工具-->
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-all</artifactId>
<version>1.10</version>
</dependency>
<!-- web啟動器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis-plusǷ-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- SpringSecurity -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Springboot整合Activiti時,需要整合SpringSecurity否則就會報錯
application.yml文件
server:
port: 80
servlet:
context-path: /workflow
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/activiti-boot?nullCatalogMeansCurrent=true&useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true
username: root
password: root
#activiti配置
activiti:
# 自動更新資料庫結構
# true:適用開發環境,默認值。activiti會對資料庫中所有表進行更新操作。如果表不存在,則自動創建
# false:適用生產環境。activiti在啟動時,對比資料庫表中保存的版本,如果沒有表或者版本不匹配,將拋出異常
# create_drop: 在activiti啟動時創建表,在關閉時刪除表(必須手動關閉引擎,才能刪除表)
# drop-create: 在activiti啟動時刪除原來的舊錶,然後在創建新表(不需要手動關閉引擎)
database-schema-update: true
# activiti7與springboot整合後默認不創建歷史表,需要手動開啟
db-history-used: true
# 記錄歷史等級 可配置的歷史級別有none, activity, audit, full
# none:不保存任何的歷史數據,因此,在流程執行過程中,這是最高效的。
# activity:級別高於none,保存流程實例與流程行為,其他數據不保存。
# audit:除activity級別會保存的數據外,還會保存全部的流程任務及其屬性。
# full:保存歷史數據的最高級別,除了會保存audit級別的數據外,還會保存其他全部流程相關的細節數
# 據,包括一些流程參數等。
history-level: full
# 是否自動檢查resources下的processes目錄流程定義文件
check-process-definitions: false
# 日誌級別是debug才能顯示SQL日誌
logging:
level:
org.activiti.engine.impl.persistence.entity: debug
資料庫mysql:5.7
主啟動類
@SpringBootApplication
public class workflowApplication {
public static void main(String[] args) {
SpringApplication.run(workflowApplication.class,args);
}
}
測試類
@SpringBootTest
public class ActivitiTesto1 {
@Autowired
ProcessEngine processEngine;
@Autowired
RepositoryService repositoryService;
@Test
public void getProcessEngine() {
System.out.println("processEngine: " + processEngine);
}
返回結果
processEngine: org.activiti.engine.impl.ProcessEngineImpl@4cddc3d9 //獲取流程實例的時候,資料庫的25張表就已經創建出來了.
通過zip壓縮包部署流程定義
/**
* 通過zip壓縮包部署流程定義
*/
@Test
public void deplayByZip(){
//部署流程定義
//讀取zip資源壓縮包,轉成輸入流
InputStream is = ReflectUtil.getResourceAsStream("processes/leave.zip");
ZipInputStream zipInputStream = new ZipInputStream(is);
Deployment deployment = repositoryService.createDeployment()
.addZipInputStream(zipInputStream)
.name("請假申請流程壓縮包-boot")
.deploy();
//部署輸出結果
System.out.println(deployment.getId());
System.out.println(deployment.getName());
}
返回結果
d5c1d3f3-dd04-11ec-a50b-54e1ad82f401
請假申請流程壓縮包-boot
整合SpringSecurity
activiti7 與 SpringSecurity 強耦合, 創建安全認證配置類SpringSecurityConfig 類
@Configuration
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
private final Logger logger = LoggerFactory.getLogger(SpringSecurityConfig.class);
/**
* 記憶體 UserDetailsManager
*/
@Bean
public UserDetailsService myUserDetailsService() {
InMemoryUserDetailsManager inMemoryUserDetailsManager = new
InMemoryUserDetailsManager();
// 初始化帳號角色數據
addGroupAndRoles(inMemoryUserDetailsManager);
return inMemoryUserDetailsManager;
}
private void addGroupAndRoles(UserDetailsManager userDetailsManager) {
// 注意:後面流程辦理人,必須是當前存在的用戶 username
String[][] usersGroupsAndRoles = {
{"wkh", "123456", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
{"zdx", "123456", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
{"wll", "123456", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
{"wsy", "123456", "ROLE_ACTIVITI_ADMIN", "GROUP_otherTeam"},
{"zyb", "123456", "ROLE_ACTIVITI_ADMIN", "GROUP_otherTeam"},
{"gj", "123456", "ROLE_ACTIVITI_ADMIN", "GROUP_otherTeam"}
};
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 + "]");
userDetailsManager.createUser(new User(user[0],
passwordEncoder().encode(user[1]),
authoritiesStrings.stream().map(SimpleGrantedAuthority::new).collect(Collectors.toList())));
}
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}


