1、安裝插件
在idea里面,activiti的插件叫actiBPM,在插件庫里面把它安裝好,重啟idea就行了。
2、新建一個maven項目,並更改pom.xml。pom中依賴如下:
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>helloActiviti</groupId> <artifactId>helloActiviti</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring</artifactId> <version>5.18.0</version> </dependency> <!--JUnit測試--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!--activiti--> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-engine</artifactId> <version>5.18.0</version> <exclusions> <exclusion> <artifactId>slf4j-api</artifactId> <groupId>org.slf4j</groupId> </exclusion> <exclusion> <artifactId>spring-beans</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>jackson-core-asl</artifactId> <groupId>org.codehaus.jackson</groupId> </exclusion> <exclusion> <artifactId>commons-lang3</artifactId> <groupId>org.apache.commons</groupId> </exclusion> <exclusion> <artifactId>commons-lang3</artifactId> <groupId>org.apache.commons</groupId> </exclusion> </exclusions> </dependency> <!--MySQL 驅動包,如果是其他庫的話需要換驅動包--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.35</version> </dependency> </dependencies> </project>
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
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8"></property> <property name="jdbcUsername" value="root"></property> <property name="jdbcPassword" value="root"></property> <property name="databaseSchemaUpdate" value="true"></property> </bean> </beans>
測試類:
import org.activiti.engine.*; import org.activiti.engine.repository.DeploymentBuilder; import org.junit.Test; import org.activiti.engine.task.Task; import java.util.List; public class ActivitiTest { /** * 會默認按照Resources目錄下的activiti.cfg.xml創建流程引擎 */ ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); @Test public void test() { //以下兩種方式選擇一種創建引擎方式:1.配置寫在程序里 2.讀對應的配置文件 //1 testCreateProcessEngine(); //2 testCreateProcessEngineByCfgXml(); deployProcess(); startProcess(); queryTask(); //handleTask(); } /** * 測試activiti環境 */ @Test public void testCreateProcessEngine() { 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 */ @Test public void testCreateProcessEngineByCfgXml() { ProcessEngineConfiguration cfg = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml"); ProcessEngine engine = cfg.buildProcessEngine(); } /** * 發布流程 * RepositoryService */ @Test public void deployProcess() { RepositoryService repositoryService = processEngine.getRepositoryService(); DeploymentBuilder builder = repositoryService.createDeployment(); builder.addClasspathResource("hello.bpmn"); builder.deploy(); } /** * 啟動流程 * <p> * RuntimeService */ @Test public void startProcess() { RuntimeService runtimeService = processEngine.getRuntimeService(); //可根據id、key、message啟動流程 runtimeService.startProcessInstanceByKey("myProcess_1"); } /** * 查看任務 * TaskService */ @Test public void queryTask() { TaskService taskService = processEngine.getTaskService(); //根據assignee(代理人)查詢任務 String assignee = "emp"; List<Task> 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()); } } /** * 辦理任務 */ @Test public void handleTask() { TaskService taskService = processEngine.getTaskService(); //根據上一步生成的taskId執行任務 String taskId = "2504"; taskService.complete(taskId); } }
啟動流程之后就會有相應的任務產生,存在act_ru_task表中,可以查看任務節點