前面几篇介绍了些activiti的基础知识,这篇打算讲讲整合时需要注意的问题
提醒:该篇文章中使用的整合代码,已上传到GitHub,源码和文章会略有不同,文章偏旧可以参照
https://github.com/jianiter/springboot-jpa-activiti-bootstrap
先上张项目结构的整图,如下:

首先,还是要配置pom.xml:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<activiti.version>5.19.0.2</activiti.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<!--添加数据库支持-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--添加jpa支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<!--添加测试支持-->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
</dependency>
<!-- 添加日志支持 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
<!-- 添加Activiti支持 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-rest-api</artifactId>
<!--<artifactId>spring-boot-starter-rest-api</artifactId>-->
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-actuator</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-jpa</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- Testing -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.subethamail</groupId>
<artifactId>subethasmtp-wiser</artifactId>
<version>1.2</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
修改application.properties配置:
#thymeleaf的配置
spring.thymeleaf.cache=false
spring.thymeleaf.enabled=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.mode=HTML5
spring.application.name=Bootstrap Spring Boot
#mysql数据源的配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/activiti_demo
spring.datasource.username=admin
spring.datasource.password=123
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5
# hibernate 配置
spring.jpa.database=MYSQL
spring.jpa.show-sql=true
#spring.jpa.hibernate.ddl-auto=update #可以切换不同的方式
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
#大小写转换问题
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
server.port=8080
server.tomcat.uri-encoding=UTF-8
接下来,添加如下文件:

jpa在自定义SQL查询时,可以使用注解,如果有复杂SQL,可以使用native方式,配置在xml文件里,如下:

orm.xml文件里的SQL定义,举例如下
这里需要留意命名和参数的写法:
<?xml version="1.0" encoding="UTF-8" ?>
<entity-mappings xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm http://xmlns.jcp.org/xml/ns/persistence/orm_2_0.xsd"
version="2.1">
<named-native-query name="User.findByIdAndPwd"
result-class="com.dd.activiti.admin.model.User">
<query>
<![CDATA[
select * from ACT_ID_USER as u
where u.ID_=:id and u.PWD_=:pwd
]]>
</query>
</named-native-query>
</entity-mappings>
创建User.java
这里使用注解的方式,参照数据库的建表语句即可

创建UserRepository.java:
这里继承了JpaRepository,可以根据业务自行选择其他的类
需要留意的问题是,定义方法时的命名
这里的nativeQuery在orm.xml中有定义

创建IUserService.java:

创建UserServiceImpl.java
需要留意的问题是,activiti在执行task时,service注解需要指明

创建controller,这里创建两个做demo:

创建HomeController,做页面跳转:

创建AdminController.java,做json请求回传:

修改AdminApplication.java,做注解和初始化:

修改SecurityConfig.java:

做完上面这些配置,可以在test中执行,查看效果了
接下来,还需要配置前端页面资源

processes中存放activiti的流程图,bpmn,png,xml这些文件放在这里加载
static中存放css,js,images这些资源文件
templates中存放模板页面,这里使用html

创建login.html
需要留意加载资源文件的标签语法

请求一个接口得到结果显示,如下:

网友评论