1、安装插件
在idea里面,activiti的插件叫actiBPM,在插件库里面把它安装好,重启idea就行了。
2、新建一个maven项目,并更改pom.xml。pom中依赖如下:
4.0.0
helloActiviti
helloActiviti
1.0-SNAPSHOT
org.activiti
activiti-spring
5.18.0
junit
junit
4.12
org.activiti
activiti-engine
5.18.0
slf4j-api
org.slf4j
spring-beans
org.springframework
jackson-core-asl
org.codehaus.jackson
commons-lang3
org.apache.commons
commons-lang3
org.apache.commons
mysql
mysql-connector-java
5.1.35
3、在src/main/resources下面新建一个BPMN文件
新建之后页面会变成如下图所示这样,中间是画布,右边是一些元素,左边是每个元素的一些详细信息,直接拖拽右边的元素就可以画流程了。
通过拖拽,完成简单的流程(这里只用到了StartEvent、UserTask、EndEvent),连接线需要悬停在对应元素上通过拖拽中心点来产生。
画完流程图之后要更改对应元素的name和assignee,我这里画的一个很简单的流程图,只用到了startEvent、endEvent和userTask。
接下来,创建一个Activiti类,在这里我直接和Test一起做了。同时,写好activiti的配置文件activiti.cfg.xml(PS:在写数据库连接的时候,要先创建对应的数据库和用户,数据库最好是新的,因为activiti会创建出24张它自己的表)。
目录结构:
activiti.cfg.xml
测试类:
import org.activiti.engine.*;importorg.activiti.engine.repository.DeploymentBuilder;importorg.junit.Test;importorg.activiti.engine.task.Task;importjava.util.List;public classActivitiTest {/*** 会默认按照Resources目录下的activiti.cfg.xml创建流程引擎*/ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
@Testpublic void test() { //以下两种方式选择一种创建引擎方式:1.配置写在程序里 2.读对应的配置文件//1
testCreateProcessEngine();//2
testCreateProcessEngineByCfgXml();
deployProcess();
startProcess();
queryTask();//handleTask();
}/*** 测试activiti环境*/@Testpublic voidtestCreateProcessEngine() {
ProcessEngineConfiguration cfg=ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
cfg.setJdbcDriver("com.mysql.jdbc.Driver");
cfg.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/activiti");
cfg.setJdbcUsername("root");
cfg.setJdbcPassword("root"); //配置建表策略
cfg.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
ProcessEngine engine=cfg.buildProcessEngine();
}/*** 根据配置文件activiti.cfg.xml创建ProcessEngine*/@Testpublic voidtestCreateProcessEngineByCfgXml() {
ProcessEngineConfiguration cfg= ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
ProcessEngine engine=cfg.buildProcessEngine();
}/*** 发布流程
* RepositoryService*/@Testpublic voiddeployProcess() {
RepositoryService repositoryService=processEngine.getRepositoryService();
DeploymentBuilder builder=repositoryService.createDeployment();
builder.addClasspathResource("hello.bpmn");
builder.deploy();
}/*** 启动流程
*
* RuntimeService*/@Testpublic voidstartProcess() {
RuntimeService runtimeService=processEngine.getRuntimeService();//可根据id、key、message启动流程
runtimeService.startProcessInstanceByKey("myProcess_1");
}/*** 查看任务
* TaskService*/@Testpublic voidqueryTask() {
TaskService taskService= processEngine.getTaskService(); //根据assignee(代理人)查询任务
String assignee = "emp";
List tasks =taskService.createTaskQuery().taskAssignee(assignee).list();int size =tasks.size();for (int i = 0; i < size; i++) {
Task task=tasks.get(i);
}for(Task task : tasks) {
System.out.println("taskId:" + task.getId() + ",taskName:" + task.getName() + ",assignee:" + task.getAssignee() + ",createTime:" +task.getCreateTime());
}
}/*** 办理任务*/@Testpublic voidhandleTask() {
TaskService taskService= processEngine.getTaskService(); //根据上一步生成的taskId执行任务
String taskId = "2504";
taskService.complete(taskId);
}
}
启动流程之后就会有相应的任务产生,存在act_ru_task表中,可以查看任务节点