苟有恒何必三更眠五更起     最无益莫过一日曝十日寒

activiti初学

    公司现有的工作流是比较老的JBPM,用起来不太方便,经常性的流程跑一半就停止不前了。闲暇之余学习下activiti的使用,基本配置如下:

1、创建pom.xml文件所依赖的jar包

  1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3   <modelVersion>4.0.0</modelVersion>
  4   <groupId>com.ccb</groupId>
  5   <artifactId>activiti</artifactId>
  6   <packaging>war</packaging>
  7   <version>0.0.1-SNAPSHOT</version>
  8   <name>activiti Maven Webapp</name>
  9   <url>http://maven.apache.org</url>
 10   <dependencies>
 11       <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
 12     <dependency>
 13         <groupId>org.springframework</groupId>
 14         <artifactId>spring-core</artifactId>
 15         <version>4.3.14.RELEASE</version>
 16     </dependency>
 17     <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
 18     <dependency>
 19         <groupId>org.springframework</groupId>
 20         <artifactId>spring-context</artifactId>
 21         <version>4.3.14.RELEASE</version>
 22     </dependency>
 23     <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
 24     <dependency>
 25         <groupId>org.springframework</groupId>
 26         <artifactId>spring-test</artifactId>
 27         <version>4.3.14.RELEASE</version>
 28         <scope>test</scope>
 29     </dependency>
 30     <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
 31     <dependency>
 32         <groupId>org.springframework</groupId>
 33         <artifactId>spring-tx</artifactId>
 34         <version>4.3.14.RELEASE</version>
 35     </dependency>
 36     <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
 37     <dependency>
 38         <groupId>org.springframework</groupId>
 39         <artifactId>spring-beans</artifactId>
 40         <version>4.3.14.RELEASE</version>
 41     </dependency>
 42     
 43     <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
 44     <dependency>
 45         <groupId>org.mybatis.generator</groupId>
 46         <artifactId>mybatis-generator-core</artifactId>
 47         <version>1.3.5</version>
 48     </dependency>
 49     <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
 50     <dependency>
 51         <groupId>org.mybatis</groupId>
 52         <artifactId>mybatis-spring</artifactId>
 53         <version>1.3.1</version>
 54     </dependency>
 55     <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
 56     <dependency>
 57         <groupId>org.mybatis</groupId>
 58         <artifactId>mybatis</artifactId>
 59         <version>3.4.5</version>
 60     </dependency>
 61     
 62     
 63 
 64     <dependency>
 65       <groupId>junit</groupId>
 66       <artifactId>junit</artifactId>
 67       <version>4.12</version>
 68       <!-- <scope>test</scope> -->
 69     </dependency>
 70   <!-- https://mvnrepository.com/artifact/org.activiti/activiti-bpmn-converter -->
 71     <dependency>
 72         <groupId>org.activiti</groupId>
 73         <artifactId>activiti-bpmn-converter</artifactId>
 74         <version>6.0.0</version>
 75     </dependency>
 76   <!-- https://mvnrepository.com/artifact/org.activiti/activiti-bpmn-model -->
 77     <dependency>
 78         <groupId>org.activiti</groupId>
 79         <artifactId>activiti-bpmn-model</artifactId>
 80         <version>6.0.0</version>
 81     </dependency>
 82     <!-- https://mvnrepository.com/artifact/org.activiti/activiti-image-generator -->
 83     <dependency>
 84         <groupId>org.activiti</groupId>
 85         <artifactId>activiti-image-generator</artifactId>
 86         <version>6.0.0</version>
 87     </dependency>
 88      <!-- https://mvnrepository.com/artifact/org.activiti/activiti-process-validation -->
 89     <dependency>
 90         <groupId>org.activiti</groupId>
 91         <artifactId>activiti-process-validation</artifactId>
 92         <version>6.0.0</version>
 93     </dependency>
 94     <!-- https://mvnrepository.com/artifact/log4j/log4j -->
 95     <dependency>
 96         <groupId>log4j</groupId>
 97         <artifactId>log4j</artifactId>
 98         <version>1.2.17</version>
 99     </dependency>
100     <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
101     <dependency>
102         <groupId>org.slf4j</groupId>
103         <artifactId>slf4j-log4j12</artifactId>
104         <version>1.7.25</version>
105         <scope>test</scope>
106     </dependency>
107     <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
108     <dependency>
109         <groupId>org.slf4j</groupId>
110         <artifactId>slf4j-api</artifactId>
111         <version>1.7.25</version>
112     </dependency>
113     <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
114     <dependency>
115         <groupId>mysql</groupId>
116         <artifactId>mysql-connector-java</artifactId>
117         <version>5.1.38</version>
118     </dependency>
119     <!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
120     <dependency>
121         <groupId>commons-dbcp</groupId>
122         <artifactId>commons-dbcp</artifactId>
123         <version>1.4</version>
124     </dependency>
125 <!--     <dependency>
126        <groupId>org.activiti</groupId>
127        <artifactId>activiti-root</artifactId>
128        <version>6.0.0</version>
129     </dependency> -->
130     
131     <!-- https://mvnrepository.com/artifact/org.activiti/activiti-spring -->
132     <dependency>
133         <groupId>org.activiti</groupId>
134         <artifactId>activiti-spring</artifactId>
135         <version>6.0.0</version>
136     </dependency>
137     <!-- https://mvnrepository.com/artifact/org.activiti/activiti-engine -->
138     <dependency>
139         <groupId>org.activiti</groupId>
140         <artifactId>activiti-engine</artifactId>
141         <version>6.0.0</version>
142     </dependency>
143     
144   </dependencies>
145   <build>
146     <finalName>activiti</finalName>
147     <plugins>
148         <plugin>
149             <groupId>org.apache.maven.plugins</groupId>
150             <artifactId>maven-compiler-plugin</artifactId>
151             <configuration>
152                 <source>1.8</source>
153                 <target>1.8</target>
154             </configuration>
155         </plugin>
156     </plugins>
157     <!-- maven加载src下的xml文件 -->
158     <resources>
159         <resource>
160             <directory>src/main/java</directory>
161             <includes>
162                 <include>**/*.xml</include>
163             </includes>
164         </resource>
165     </resources>
166   </build>
167 </project>
pom.xml

注意加载日志包时log4j和slf4j的版本匹配,启动服务时需要依赖log4j.properties配置文件。

这里使用的mybatis框架,数据库使用的mysql。

2、activiti.cfg.xml核心配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans
 6        http://www.springframework.org/schema/beans/spring-beans.xsd
 7        http://www.springframework.org/schema/mvc
 8        http://www.springframework.org/schema/mvc/spring-mvc.xsd
 9        http://www.springframework.org/schema/context 
10        http://www.springframework.org/schema/context/spring-context.xsd">    
11        <!--配置数据源-->    
12        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">        
13                <property name="driverClassName" value="com.mysql.jdbc.Driver"/>      
14                <!--配置数据库中的中文乱码-->        
15                <property name="url" value="jdbc:mysql://localhost:3306/activiti? useUnicode=true&amp;characterEncoding=UTF-8"/>        
16                <property name="username" value="root"/>        
17                <property name="password" value="123456lq"/>        
18                <property name="maxActive" value="3"/>        
19                <property name="maxIdle" value="1"/>
20                <property name="defaultAutoCommit" value="false"></property>    
21            </bean>  
22            <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">        
23                <property name="dataSource" ref="dataSource"/>
24                <property name="transactionManager" ref="transactionManager"></property>        
25                <property name="databaseSchemaUpdate" value="true"/>    
26            </bean>  
27            <!-- <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">        
28                <property name="dataSource" ref="dataSource"/>        
29                <property name="databaseSchemaUpdate" value="true"/>    
30            </bean>  -->
31            <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
32                <property name="dataSource" ref="dataSource"></property>
33            </bean>
34 </beans>
activiti.cfg.xml

这里使用的是dbcp连接池,也可以自行配置其他的。

3、初始化数据库表执行类

 1 package com.ccb.commons;
 2 
 3 import org.activiti.engine.ProcessEngine;
 4 import org.activiti.engine.ProcessEngineConfiguration;
 5 import org.junit.Test;
 6 
 7 /**
 8  * 初始化MYSQL数据库中activiti工作流需要用到的表28个
 9  * @author 刘强
10  *
11  */
12 public class CreateInitTableUtils {
13     //private static final Logger log =LoggerFactory.getLogger(CreateInitTableUtils.class);
14     @Test
15     public void createTable(){
16         ProcessEngineConfiguration configuration =
17         ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
18         ProcessEngine processEngine = configuration.buildProcessEngine();
19         //log.info(processEngine.toString());
20         System.out.println(processEngine);
21     }
22 }
CreateInitTableUtils.java

4、spring-servlet.xml配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xmlns:aop="http://www.springframework.org/schema/aop"
 6     xmlns:p="http://www.springframework.org/schema/p"
 7     xmlns:tx="http://www.springframework.org/schema/tx"
 8     xmlns:jee="http://www.springframework.org/schema/jee"
 9     
10     xsi:schemaLocation="http://www.springframework.org/schema/beans
11         http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
12         http://www.springframework.org/schema/context
13         http://www.springframework.org/schema/context/spring-context-4.0.xsd
14         http://www.springframework.org/schema/jee
15         http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
16         
17         http://www.springframework.org/schema/aop
18         http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
19         http://www.springframework.org/schema/tx
20         http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
21        <!-- 注解方法,暂未开启 -->
22        <!--  <mvc:annotation-driven/>
23         <mvc:default-servlet-handler/> -->
24         <!-- 解决返回jsp页面省略后缀写法 -->
25         <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
26         <property name="prefix" value="/"></property>
27         <property name="suffix" value=".jsp"></property>
28         </bean>
29         <!-- 支持文件上传 -->
30         <bean id="multipartResolver"
31         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
32         <!-- one of the properties available; the maximum file size in bytes -->
33         <property name="maxUploadSize" value="5000000"/>
34 
35         </bean>
36         
37         
38         <!-- 需要扫描的包 -->
39         <context:component-scan base-package="com.ccb.*.dao"></context:component-scan>
40         
41         <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">        
42                <property name="driverClassName" value="com.mysql.jdbc.Driver"/>      
43                <!--配置数据库中的中文乱码-->        
44                <property name="url" value="jdbc:mysql://localhost:3306/activiti? useUnicode=true&amp;characterEncoding=UTF-8"/>        
45                <property name="username" value="root"/>        
46                <property name="password" value="123456lq"/>        
47                <property name="maxActive" value="3"/>        
48                <property name="maxIdle" value="1"/>
49                <property name="defaultAutoCommit" value="false"></property>    
50            </bean>  
51         <!-- 加载配置的 *.mbm.xml文件-->
52         <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
53             <property name="dataSource" ref="datasource"></property>
54             <property name="mapperLocations">
55                 <list>
56                     <value>classpath:com.ccb.activiti.dto/*.mbm.xml</value>
57                 </list>
58             </property>
59             <property name="configLocation" value="classpath:mybatis-config.xml"></property>
60         </bean>
61         <!-- <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">  
62                 <constructor-arg index="0">  
63                         <ref bean="sqlSessionFactory" />  
64                 </constructor-arg>  
65         </bean> -->  
66   
67         <!-- 动态代理实现 不用写dao的实现   -->
68         <bean id="MapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
69                <!--  这里的basePackage 指定了dao层接口路劲,这里的dao接口不用自己实现 -->  
70                 <property name="basePackage" value="com.ccb.activiti.dao" />  
71                <!--  如果只有一个数据源的话可以不用指定,但是如果有多个数据源的话必须要指定 -->  
72                 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />  
73               <!--   直接制定了sqlsessionTemplate名称,这个和上面的其实是一样的 -->  
74                 <property name="sqlSessionTemplateBeanName" value="sqlSession" />  
75         </bean>
76         <!-- 事物管理 -->
77         <tx:annotation-driven transaction-manager="transactionManager"/>
78         <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
79             <property name="dataSource" ref="datasource"></property>
80         </bean>
81  </beans>
spring-servlet.xml

5、具体业务逻辑封装管理类

 1 package com.ccb.commons;
 2 
 3 import java.io.FileInputStream;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 import java.util.zip.ZipInputStream;
 7 
 8 import org.activiti.engine.FormService;
 9 import org.activiti.engine.HistoryService;
10 import org.activiti.engine.IdentityService;
11 import org.activiti.engine.ManagementService;
12 import org.activiti.engine.ProcessEngine;
13 import org.activiti.engine.ProcessEngineConfiguration;
14 import org.activiti.engine.RepositoryService;
15 import org.activiti.engine.RuntimeService;
16 import org.activiti.engine.TaskService;
17 import org.activiti.engine.repository.Deployment;
18 import org.springframework.context.ApplicationContext;
19 import org.springframework.context.support.ClassPathXmlApplicationContext;
20 
21 /**
22  * 具体业务逻辑封装管理类
23  * @author 刘强
24  *
25  */
26 public class ProjectInitManager {
27     
28     private ApplicationContext applicationContext;
29     
30     private ProcessEngineConfiguration configuration;
31 
32     public ProjectInitManager() {
33         applicationContext = new ClassPathXmlApplicationContext(new String[]{"spring-mabatis.xml"});
34         configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
35     }
36     public Object getBeanByName(String name){
37         return applicationContext.getBean(name);
38     }
39     
40     public ProcessEngine getProcessEngine(){
41         return configuration.buildProcessEngine();
42     }
43     
44     //发布流程
45     public void deployProcess(String ProcessFileName){
46         InputStream inputStream = 
47                 this.getClass().getClassLoader().getResourceAsStream(ProcessFileName);
48         getProcessEngine().getRepositoryService().createDeployment()
49                 .addInputStream(ProcessFileName, inputStream).deploy();
50     }
51     
52     //批量发布流程
53     public void deployProcessByZip(String processFileName) throws IOException{
54         ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(processFileName));
55         Deployment deployment = 
56                 getProcessEngine().getRepositoryService().createDeployment()
57                 .addZipInputStream(zipInputStream).deploy();
58         
59     }
60     
61     public RepositoryService getRepositoryService(){
62         return getProcessEngine().getRepositoryService();
63     }
64     
65     public FormService getFormService(){
66         return getProcessEngine().getFormService();
67     }
68     
69     public HistoryService getHistoryService(){
70         return getProcessEngine().getHistoryService();
71     }
72     
73     public IdentityService getIdentityService(){
74         return getProcessEngine().getIdentityService();
75     }
76     
77     public ManagementService getManagementService(){
78         return getProcessEngine().getManagementService();
79     }
80     
81     public RuntimeService getRuntimeService(){
82         return getProcessEngine().getRuntimeService();
83     }
84     
85     public TaskService getTaskService(){
86         return getProcessEngine().getTaskService();
87     }
88     //初始化数据库
89     public void initActivitiData(){
90         getProcessEngine();
91     }
92 }
ProjectInitManager.java

其他的具体实现类,controller,service,dao层逻辑就不一一列举了。

 

posted @ 2018-03-24 10:20  月魄  阅读(598)  评论(0编辑  收藏  举报