基于SpringBoot的jbpm7环境搭建
1 创建SpringBoot 项目
pom.xml如下:
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxxx</groupId>
<artifactId>springboot-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-server-spring-boot-starter-jbpm</artifactId>
<version>7.31.0.Final</version>
</dependency>
<dependency>
<groupId>tomcat</groupId>
<artifactId>naming-factory-dbcp</artifactId>
<version>5.5.15</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.properties配置文件如下:
server.port=8080
server.servlet.context-path=/spring
#datasource configuration
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.url=jdbc:mysql://localhost:3307/jbpm?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Chongqing
#hibernate configuration
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.hbm2ddl.auto=update
#Entity scan packages
spring.jpa.properties.entity-scan-packages=application.entity
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
#transaction manager configuration
spring.jta.narayana.transaction-manager-id=1
logging.level.com.arjuna.ats.jdbc=ERROR
2 创建jbpm配置文件
package application.config;
import javax.persistence.EntityManagerFactory;
import org.jbpm.runtime.manager.impl.RuntimeEnvironmentBuilder;
import org.jbpm.services.task.identity.DBUserGroupCallbackImpl;
import org.kie.api.io.ResourceType;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.manager.RuntimeEngine;
import org.kie.api.runtime.manager.RuntimeEnvironment;
import org.kie.api.runtime.manager.RuntimeManager;
import org.kie.api.runtime.manager.RuntimeManagerFactory;
import org.kie.api.task.TaskService;
import org.kie.internal.io.ResourceFactory;
import org.kie.internal.runtime.manager.context.EmptyContext;
import org.kie.internal.task.api.UserGroupCallback;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
@Configuration
public class JbpmConfig {
@Bean
RuntimeEnvironment runtimeEnvironment(EntityManagerFactory entityManagerFactory) {
RuntimeEnvironment runtimeEnvironment = RuntimeEnvironmentBuilder.Factory.get()
.newDefaultBuilder().entityManagerFactory(entityManagerFactory)
//Test.bpmn放置于resource文件夹下
.addAsset(ResourceFactory.newClassPathResource("Test.bpmn"), ResourceType.BPMN2)
.get();
return runtimeEnvironment;
}
@Bean
RuntimeManager runtimeManager(RuntimeManagerFactory runtimeManagerFactory,RuntimeEnvironment runtimeEnvironment) {
RuntimeManager runtimeManager = runtimeManagerFactory.newSingletonRuntimeManager(runtimeEnvironment);
return runtimeManager;
}
@Bean
RuntimeEngine runtimeEngine(RuntimeManager runtimeManager) {
RuntimeEngine runtimeEngine = runtimeManager.getRuntimeEngine(EmptyContext.get());
return runtimeEngine;
}
@Bean
KieSession kieSession(RuntimeEngine runtimeEngine) {
KieSession kieSession = runtimeEngine.getKieSession();
return kieSession;
}
@Bean
TaskService taskService(RuntimeEngine runtimeEngine) {
TaskService taskService = runtimeEngine.getTaskService();
return taskService;
}
//userGroupCallback用于判断用户是否存在,组是否存在,找到用户所属的组,默认已经配置了SpringSecurityUserGroupCallback作为userGroupCallback的bean,但是我们希望使用自己的数据库表来进行判断,所以配置DBUserGroupCallbackImpl作为 userGroupCallback的bean,需要使用jbpm.usergroup.callback.properties来配置
@Bean
@DependsOn("jndiDataSource")
UserGroupCallback userGroupCallback() {
return new DBUserGroupCallbackImpl(true);
}
}
jbpm.usergroup.callback.properties配置如下:
#jndi name
db.ds.jndi.name=java:comp/env/jdbc/kpi
#判断用户是否存在
db.user.query=select username from kpi_user where username=?
#判断用户所属的组
db.user.roles.query=select r.rolename from kpi_role r join kpi_user_role ur on r.id=ur.rid join kpi_user u on u.id = ur.uid where u.username=?
#判断组是否存在
db.roles.query=select rolename from kpi_role where rolename=?
这些配置信息会被加载到DBUserGroupCallback中,当需要进行判断用户是否存在时,就用db.user.query获取的sql来查询数据库,根据result判断用户是否存在。
配置jndi datasource
package application.config;
import javax.naming.NamingException;
import javax.sql.DataSource;
import org.apache.catalina.Context;
import org.apache.catalina.startup.Tomcat;
import org.apache.tomcat.util.descriptor.web.ContextResource;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.embedded.tomcat.TomcatWebServer;
import org.springframework.context.annotation.Bean;
import org


1万+

被折叠的 条评论
为什么被折叠?



