Activiti配置
1) 打开Help –> install New Software
2) 点击Add
3) 填入以下字段:
a) Name:Activiti BPMN(可任意写)
b) Location:http://activiti.org/designer/update/
c) 点击Add
4) 勾选所有显示的内容
5) 同意协议
6) 安装成功后右击 new–> other 显示如下信息则表示成功
7) 打开window --> 找到Activiti 将右侧第一个Create勾选上,当你画流程时会帮你生成一张流程图片
8) 创建Maven项目
9) 配置pom.xml文件,导入相关依赖
<dependencies>
<!-- Spring -->
<!-- 1)Spring核心 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<!-- 2)Spring DAO层 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<!-- spring 事务 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<!-- 3)Spring web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<!-- spring mvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<!-- 4)Spring test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<!--Spring java 数据库访问包,在本例中主要用于提供数据源 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<!-- mybatis ORM框架 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!--mybatis-spring适配器 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- struts2 Jar -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId><!-- struts2核心包 -->
<version>2.5.8</version>
</dependency>
<!-- struts2整合spring -->
<!-- 如果用注解写Struts2则不用导整合,因为Action对象由Struts2创建 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.5.8</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.5.8</version>
</dependency>
<!-- struts2 json -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.5.8</version>
</dependency>
<!--mysql数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!--alibaba 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId><!-- 连接池 -->
<version>1.1.10</version>
</dependency>
<!-- JUnit单元测试工具 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<!--log4j日志包 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.6.1</version>
</dependency>
<!-- 数据导出 -->
<!-- jxl -->
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
<!-- poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.8</version>
</dependency>
<!-- Activiti -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.22.0</version>
</dependency>
</dependencies>
10) 配置log4j.xml (日志)
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="off" monitorInterval="1800">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
11) 创建数据库 (mysql为例)
13) 表的初始化(第一种方式java代码)
public static void main(String[] args) {
// 创建流程引擎配置
ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
configuration.setJdbcDriver("com.mysql.jdbc.Driver");
configuration.setJdbcUrl("jdbc:mysql://192.168.3.31:3306/gmactiviti");
configuration.setJdbcUsername("root");
configuration.setJdbcPassword("root");
/**
* ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE 如果数据库里面没有activiti的表,也不会创建
* ProcessEngineConfiguration.DB_SCHEMA_UPDATE_CREATE_DROP 创建表,使用完之后删除
* ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE 如果数据库里面没有表就创建
* drop-create 数据库里面有表,那么就先删除再创建
*/
// 配置表的初始化方式
configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// 得到流程引擎
ProcessEngine processEngine = configuration.buildProcessEngine();
System.out.println(processEngine);
}
14) 表的初始化(第二种方式xml配置)
a) 创建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"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd ">
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://192.168.3.31:3306/gmactiviti" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="root" />
<property name="databaseSchemaUpdate" value="true" />
</bean>
</beans>
b) 获取流程引擎
public static void main(String[] args) {
ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("/activiti-cfg.xml");
// 得到流程引擎
ProcessEngine processEngine = configuration.buildProcessEngine();
System.out.println(processEngine);
}
15) 表的初始化(第三种方式)
public static void main(String[] args) {
// 使用该方式必须配置activiti.cfg.xml(名字必须为activiti.cfg.xml,当你使用默认方法时会自动扫描查找该配置文件)
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
System.out.println(engine);
}
16) 模拟练习(请假)
a) 创建一个HelloWorld.java
b) 创建一个Activiti
c) 画流程图
d) 设置流程办理人(实际开发中根据谁操作就谁办理)
e) 设置流程的Id和Name
f) 部署流程 –> 启动流程 –> 查询任务 –> 办理任务
// 得到流程引擎
private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//部署流程引擎
@Test
public void deployProcess() {
// 得到流程部署的Service
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deploy = repositoryService.createDeployment().name("流程部署001")
.addClasspathResource("HelloWorld.bpmn")
.addClasspathResource("HelloWorld.png")
.deploy();
System.out.println("流程部署Id:"+deploy.getId());
}
// 启动流程
@Test
public void startProcess() {
RuntimeService runtimeService = this.processEngine.getRuntimeService();
runtimeService.startProcessInstanceByKey("HelloWorld");
System.out.println("流程启动成功");
}
// 查询任务
@Test
public void queryTask() {
TaskService taskService = this.processEngine.getTaskService();
String assignee = "王五";
List<Task> list = taskService.createTaskQuery().taskAssignee(assignee).list();
if (null!=list&&list.size()>0) {
for (Task task : list) {
System.out.println("任务ID:"+task.getId());
System.out.println("任务名称:"+task.getName());
System.out.println("代理人名称:"+task.getAssignee());
System.out.println("-------------------------------");
}
}
System.out.println("任务查询成功");
}
// 办理任务
@Test
public void completeTask() {
TaskService taskService = this.processEngine.getTaskService();
String taskId = "7502";
taskService.complete(taskId);
System.out.println("办理成功");
}
17) Activiti的核心常用类·
// 流程图的部署、修改、删除的服务器 `act_ge_bytearray``act_re_deployment``act_re_model``act_re_procdef`
RepositoryService repositoryService = engine.getRepositoryService();
// 流程的运行 `act_ru_event_subscr``act_ru_execution``act_ru_identitylink``act_ru_job``act_ru_task``act_ru_variable`
RuntimeService runtimeService = engine.getRuntimeService();
TaskService taskService = engine.getTaskService();
// 流程的查询 `act_hi_actinst``act_hi_attachment``act_hi_comment``act_hi_detail``act_hi_identitylink``act_hi_procinst``act_hi_taskinst``act_hi_varinst`
HistoryService historyService = engine.getHistoryService();
// 页面表单的服务[了解]
FormService formService = engine.getFormService();
// 对工作流的用户管理的表的操作 `act_id_group``act_id_info``act_id_membership``act_id_user`
IdentityService identityService = engine.getIdentityService();
// 管理器
ManagementService managementService = engine.getManagementService();
// 流程定义 `act_re_procdef`
ProcessDefinition
// 流程实例 `act_ru_execution`
ProcessInstance
// 执行实例 `act_ru_execution`
Execution