使用idea进行activiti工作流开发入门学习
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表中,可以查看任务节点
最后,关注【码上加油站】微信公众号后,有疑惑有问题想加油的小伙伴可以码上加入社群,让我们一起码上加油吧!!!
posted on 2018-12-17 10:41 LoaderMan 阅读(13209) 评论(3) 编辑 收藏 举报