公司現有的工做流是比較老的JBPM,用起來不太方便,常常性的流程跑一半就中止不前了。閒暇之餘學習下activiti的使用,基本配置以下:java
一、建立pom.xml文件所依賴的jar包mysql
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>
注意加載日誌包時log4j和slf4j的版本匹配,啓動服務時須要依賴log4j.properties配置文件。web
這裏使用的mybatis框架,數據庫使用的mysql。spring
二、activiti.cfg.xml核心配置文件sql
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&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>
這裏使用的是dbcp鏈接池,也能夠自行配置其餘的。數據庫
三、初始化數據庫表執行類apache
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 }
四、spring-servlet.xml配置文件api
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&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-mvc
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 }
其餘的具體實現類,controller,service,dao層邏輯就不一一列舉了。session