本文是学习Camunda与springboot集成的一个入门案例。整体流程与Camunda的官网教程一致。
也可以参考官网进行学习,官网是基于eclipse的,我这里是基于idea的。
一.导入依赖
创建一个新的springboot项目,导入依赖。
项目的pom文件的主要内容为:
<properties>
<java.version>1.8</java.version>
<camunda.spring-boot.version>7.17.0</camunda.spring-boot.version>
<spring-boot.version>2.6.6</spring-boot.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.camunda.bpm.springboot</groupId>
<artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId>
<version>${camunda.spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
运行项目,访问http://localhost:8080/ ,即可以看到项目的运行界面。
看到的运行界面为:
第一次访问界面会要求创建一个账户。
创建一个用户后,既可以跳转到登录界面,可以用刚才创建的用户进行登录。登录成功后就可以看到camunda的管理页面如下。
自定义配置
在上一步中,我们是按照默认的配置进行运行,我们也可以进行自定义配置,最简单的方法就是在application.yml或application.properties中进行配置。
camunda.bpm:
admin-user:
id: demo
password: demo
firstName: Demo
filter:
create: All tasks
上面的配置分别配置了:
- 创建了管理员用户,以及相应的密码和名字
- 为任务列表创建了名字为All tasks的默认过滤器
再次启动项目,则可以直接登录。
在任务列表中也可以看到创建的默认过滤器。
部署和调用工作流流程
在上边学会了如何在spring boot中集成camunda,接下来就从一个例子中真正的体会二者是如何进行交互的。
首先,使用Camunda Modeler对流程进行建模。建好的模型如下图所示:
(Camunda Modeler是Camunda提供的画图软件,可以进行安装,可以生成图对应的xml格式,直接将其生成的xml文件保存即可)。
画图后记得设置id,id是一个图的唯一标识,后面部署流程图的时候也是使用id作为标识。
将文件(即刚刚提到的自动生成的xml文件)另存为demo1.bpmn,并将该文件保存在maven项目的resources目录下。
要实现业务流程的自动部署,需要做以下两点。
-
在resources下新建目录META-INF,并在该目录下新建processes.xml,xml文件内容可为空。
-
在启动类中添加注解@EnableProcessApplication,如下
@SpringBootApplication
@EnableProcessApplication
public class CamundaDemoApplication {
public static void main(String[] args) {
SpringApplication.run(CamundaDemoApplication.class, args);
}
}
- 接下来在程序中编写代码对流程进行加载。修改启动类为:
@SpringBootApplication
@EnableProcessApplication
public class CamundaDemoApplication {
public static void main(String[] args) {
SpringApplication.run(CamundaDemoApplication.class, args);
}
@Autowired
private RuntimeService runtimeService;
@EventListener
private void processPostDeploy(PostDeployEvent event) {
runtimeService.startProcessInstanceByKey("test");
}
}
注:这里的test对应于bpmn文件的id,id是流程图文件的唯一标识,这里必须与id相对应。
最后重启应用。
依旧是输入用户名和密码,可以在Camunda Tasklist 中看到我们刚刚定义好的流程。
本文参考了Camunda的官方文档:https://docs.camunda.org/get-started/spring-boot/model/。