springboot3整合activiti 8(DEMO)含代码

springboot3整合activiti 8(DEMO)含代码

目录

1 项目版本介绍

2 引入的依赖

4 添加安全工具类(也是因为安全框架)

5 在项目运行前,需要手动建表

6 yml配置

7 启动即可


该项目仅作为Demo使用,仅作为工作流学习的项目,以此学习工作流activiti的基本操作。

项目的github地址:

githubhttps://github.***/DamonKima/activiti/tree/main


1 项目版本介绍
  1. springboot-version-3.2.0
  2. activiti-version-8

2 引入的依赖
  1. spring-boot-starter-web
  2. mysql-connector-j

  3. lombok

  4. spring-boot-starter-test

  5. spring-boot-starter-jdbc

  6. activiti-spring-boot-starter

  7. junit-jupiter

activiti-spring-boot-starter8.1.0版本的最新依赖在maven官网中没有更新,需要导入activiti的库才行。

activiti8依赖地址https://activiti.gitbook.io/activiti-7-developers-guide/releases/8.1.0

即引入库:

<repositories>
  <repository>
    <id>activiti-releases</id>
    <url>https://artifacts.alfresco.***/nexus/content/repositories/activiti-releases</url>
  </repository>
</repositories>

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>3.2.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>***.example</groupId>
    <artifactId>Activiti8Test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Activiti8Test</name>
    <description>Activiti8Test</description>

    <properties>
        <java.version>17</java.version>
    </properties>

    <repositories>
        <repository>
            <id>activiti-releases</id>
            <url>https://artifacts.alfresco.***/nexus/content/repositories/activiti-releases</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>***.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!--整合activiti-->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter</artifactId>
            <version>8.1.0</version>
        </dependency>
        
        <!--测试-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

3 添加配置类(因为activiti内置了springboot的安全框架,所以需要配置)

项目目录如下:

该类是config下的DemoApplicationConfiguration类

package ***.example.activiti8test.config;

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 = {
                {"jack", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
                {"rose", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
                {"tom", "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 添加安全工具类(也是因为安全框架)

该类是utils下的SecurityUtil

package ***.example.activiti8test.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
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.***ponent;

import java.util.Collection;


@***ponent
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);
    }
}

5 在项目运行前,需要手动建表

在外部库中找到activiti-engine依赖,在org.activiti的db的create中找到mysql的建表语句,自己进行建表。


6 yml配置

如果使用的连接器(mysql-connector-java)版本在6以下,使用的驱动类就是***.mysql.jdbc.Driver,如果连接器版本是6以及6以上,使用的驱动类就是***.mysql.cj.jdbc.Driver,如果依然使用过的是***.mysql.jdbc.Driver,那么就会有个警告性的错误提示:

Loading class '***.mysql.jdbc.Driver'. This is deprecated. The new driver class is '***.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

记得修改usernamepassword

spring:
  datasource:
    driver-class-name: ***.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/activiti8?nullCatalogMeansCurrent=true
    username: root
    password: root
  activiti:
    database-schema-update: true
    db-history-used: true
    history-level: full
    check-process-definitions: true

7 启动即可

启动即可

转载请说明出处内容投诉
CSS教程_站长资源网 » springboot3整合activiti 8(DEMO)含代码

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买