工作流主要解决问题:
为了实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。
意义:
虽然工作流实现的功能也可以不用工作流就能实现,但普通实现过程难度大、代码逻辑结构复杂、增加了大量的与数据库交互的过程,而使用工作流能大大的简化开发工程。
activiti工作流学习的重点:
- 一个引擎:ProcessEngine对象时activiti工作流的引擎,是工作的核心,所有的操作都是从他开始的,所以一般会把引擎作为全局变量。
- 配置文件:activiti核心配置文件activiti.cfg.xml,配置流程引擎创建工具的基本参数和数据库连接池参数。该文件名为默认文件名,修改后再用需要指定文件。
- 23张表:activiti依赖数据库,共有23张表存放不同方面的数据,有流程定义表、任务结点表、流程变量表、任务历史表等等。
- 5项service:不同service类对应不同的功能。比如TaskService是任务服务类,可以从这个类中获取任务的信息。HistoryService是查询历史信息类,在一个流程执行完成后,这个对象为我们提供查询历史信息。
- 7项基本操作:
1.流程图的创建(各种组件,如用户、任务、网关、连线等)
2.流程定义增删改查
3.流程变量增删改查
4.启动流程定义
5.任务增删改查
6.完成任务
7.历史信息查询
工作流工程的创建:
关于工作流工程的创建网上有很多的帖子和教程,我就不细说了,我只说一下其中的注意事项。
- eclipse下载activiti插件有两种方式(具体百度),第一种是在Help->Install New Software里安装,第二种是下载好插件包,解压到eclipse安装目录的dropins目录。第一种如果网络不好是不行的,即使网速快也要安装10多分钟,第二种是要看eclipse的版本的,亲测eclipse3.7是可以用第二种方式安装,而eclipse4.5是不能用第二种方式安装,eclipse4.6可以用第一种方式安装,其余版本情况我就不清楚了。
- activiti插件创建的activiti工程是maven工程的结构目录。我在eclipse3.7中用第二种方式安装好插件后创建activiti工程,发现虽然有maven的pom.xml但是并没有把pom.xml生成的库即Maven Dependencies加载到环境中,而通过在项目上右击选择maven->Enable Dependency Management把Maven Dependencies加载到环境中后发现项目报错,而报错的内容通过各种百度都解决不了。但使用eclipse4.6第一种方式安装插件创建的activiti工程却可以顺利的转换为maven工程。这里我的结论是如果maven理解的不够,就不要用activiti插件创建activiti工程,只用eclipse创建java工程或动态web工程,再用activiti插件创建activiti Diagram,最后再在lib中加入各种依赖包也是可以实现的,如果就是想用maven方式而又不成功的话,建议多换换eclipse和activiti插件的版本试试。
activiti引擎的创建:
两种方式:
1.第一种方式不需要配置文件。
@Test
public void createActiviti(){
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/数据库名");
processEngineConfiguration.setJdbcUsername("数据库用户名");
processEngineConfiguration.setJdbcPassword("数据库密码");
processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
System.out.println(processEngine);
}
2.第二种方式需要配置文件,注意文件名修改的话需要指定那个文件,下边代码就是修改文件名后的代码。
@Test
public void createActiviti(){
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti-config.xml");
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
System.out.println(processEngine);
}
如果不修改用默认文件名activiti.cfg.xml,则代码为
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
配置文件代码如下,其实就是一个spring的配置文件。
<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/数据库名"></property>
<property name="jdbcUsername" value="数据库用户名"></property>
<property name="jdbcPassword" value="数据库密码"></property>
<property name="databaseSchemaUpdate" value="true"></property>
</bean>
</beans>
注意参数databaseSchemaUpdate共有三种类型,上边代码中设置为true是最常用的一种,其余的两种自行百度吧。