架構的環境搭建
1. 類庫
2. 安裝activiti 流程圖插件(eclipse)
Name: Activiti BPMN 2.0 designer
Location: http://activiti.org/designer/update/
兩種方式建立流程資料庫:
第一種方式:用jdbc的方式
@Test
public void test1() {
ProcessEngineConfiguration config = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
config.setJdbcDriver("com.mysql.jdbc.Driver");
config.setJdbcUrl("jdbc:mysql://localhost:3306/activitidb1818?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8");
config.setJdbcUsername("root");
config.setJdbcPassword("admin");
//如果已經有資料庫就不建立
config.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
ProcessEngine engin = config.buildProcessEngine();
System.out.println("流程引擎:"+engin);
}
第二種方式:用spring托管的方式建立流程資料庫:
@Test
public void test2() {
ProcessEngineConfiguration config = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
ProcessEngine engine = config.buildProcessEngine();
System.out.println("流程引擎"+engine);
}
注意要建立一個source folder裡面存放activiti的配置檔案:
activiti.cfg.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.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/activitidb1818?useUnicode=true&characterEncoding=utf8"></property>
<property name="jdbcUsername" value="root"></property>
<property name="jdbcPassword" value="admin"></property>
<!-- 沒有表建立表 -->
<property name="databaseSchemaUpdate" value="true"></property>
</bean>
</beans>
db.properties
jdbc.url=jdbc:mysql://localhost:3306/activitidb1818?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.username=root
jdbc.password=admin
log4j.properties
log4j.rootLogger=INFO, CA
# ConsoleAppender
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern= %d{hh:mm:ss,SSS} [%t] %-5p %c %x - %m%n
接下來在eclipse中Preference->Activiti->Save Actions中勾選Create process definition imagine when saving the diagram

意思是儲存流程時儲存流程圖檔
2.建立流程及使用
在config(source folder)中建立floder用來儲存建立的Activiti Diagram
在建立的.bpmn檔案中繪制流程:
RepositoryService 管理流程定義
RuntimeService 執行管理,包括啟動、推進、删除流程執行個體等操作
TaskService 任務管理
HistoryService 曆史管理(執行完的資料的管理)
IdentityService 組織機構管理
FormService 一個可選服務,任務表單管理
ProcessEngine 可以擷取業務類,業務類使用MyBatis對資料進行持久化操作
getDefaultProcessEngine()方法預設去類路徑下找activiti.cfg.xml檔案,用來連接配接資料庫
/**
*art_re_procdef 流程定義模闆
*act_re_deployment 部署表、
*act_ge_bytearray 存放資源檔案(二進制資料)
*act_ru_execution 流程執行個體執行對象表
*act_hi_taskinst 流程執行個體曆史記錄
*act_hi_task 流程執行個體任務表
*/
public class HelloTest {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//部署流程定義(模闆)
@Test
public void deployDB() {
Deployment deployment = processEngine.getRepositoryService()
.createDeployment()//傳回一個部署對象
.name("hello入門程式")
.addClasspathResource("diagram/helloworld.bpmn")
.addClasspathResource("diagram/helloworld.png")
.deploy();
System.out.println(deployment.getId() + "::" + deployment.getName());
}
//啟動流程執行個體(具體要處理的流程)
@Test
public void startProcess() {
ProcessInstance pi = processEngine.getRuntimeService()
.startProcessInstanceByKey("myProcess");
System.out.println(pi.getId() + "," +pi.getActivityId());
}
//查找待辦人的任務清單
@Test
public void findTaskListByAsignee() {
String asignee = "zhangsan";
List<Task> taskList = processEngine.getTaskService()
.createTaskQuery()
.taskAssignee(asignee)
.list();
for (Task task : taskList) {
System.out.println(task.getId() + "::" + task.getName() + "::" + task.getAssignee());
}
}
//完成任務(推進任務節點)
@Test
public void finishTask() {
String taskId = "604";
processEngine.getTaskService().complete(taskId );
System.out.println("完成任務");
}
//檢視流程定義清單
@Test
public void findAllDef() {
List<ProcessDefinition>list = processEngine.getRepositoryService()
.createProcessDefinitionQuery()
.list();
for(ProcessDefinition pd :list) {
System.out.println(pd.getId()+":"+pd.getResourceName()+":"+pd.getDiagramResourceName()+":"+ pd.getVersion());
}
}
//删除流程定義(強行删除,級聯的删除,全部都删)
@Test
public void removeProcessDef() {
String deployment = "1";
processEngine.getRepositoryService().deleteDeployment(deployment, true);
System.out.println("删除成功");
}
//檢視流程定義
@Test
public void viewPic() throws IOException{
String deploymentId = "101";
String resourceName = "";
List<String> list = processEngine.getRepositoryService()
.getDeploymentResourceNames(deploymentId);
for (String name : list) {
if (name.indexOf(".png") != -1) {
resourceName = name;
}
}
InputStream in = processEngine.getRepositoryService()
.getResourceAsStream(deploymentId, resourceName);
File destFile = new File("d:\\" + resourceName);
// 把Inputstream 另存到 D://
FileUtils.copyInputStreamToFile(in, destFile);
System.out.println("圖檔讀取完成");
}
}