springboot2.04與activiti 6.0集成


本文就不對activiti做解釋,下面直接看項目集成

以下順序方面根據我的理解來,可以先從第二章看,再看第一張與第三章

增加activiti表的API,備注用。

目錄

一、springboot2.X集成activiti

1.1. 引入jar包

1.2. 創建啟動類(componentScan是自己項目持久化模板,可以直接刪掉)

1.3. 配置application.yml

1.4. 啟動可能出現的錯誤

二、編寫測試流程

三、編寫bpmn

1.1 設置編碼

1.2 創建bpmn

1.3 編寫邏輯

四、activiti數據庫表概覽

  1.1 說明

1.2 概覽

1.2.1   Activiti數據表清單:



一、springboot2.X集成activiti

1.1. 引入jar包


   
   
  
  
          
  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2.      xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
  3.      xsi:schemaLocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.      <modelVersion>4.0.0 </modelVersion>
  5.      <artifactId>enn-activiti </artifactId>
  6.      <groupId>enn.activiti </groupId>
  7.      <version>1.1.1-SNAPSHOT </version>
  8.      <packaging>jar </packaging>
  9.      <parent>
  10.          <groupId>org.springframework.boot </groupId>
  11.          <artifactId>spring-boot-starter-parent </artifactId>
  12.          <version>2.0.4.RELEASE </version>
  13.      </parent>
  14.      <dependencies>
  15.          <dependency>
  16.              <groupId>org.springframework.boot </groupId>
  17.              <artifactId>spring-boot-starter-web </artifactId>
  18.              <exclusions>
  19.                  <exclusion>
  20.                      <groupId>org.hibernate.validator </groupId>
  21.                      <artifactId>hibernate-validator </artifactId>
  22.                  </exclusion>
  23.                  <exclusion>
  24.                      <groupId>org.apache.logging.log4j </groupId>
  25.                      <artifactId>log4j-to-slf4j </artifactId>
  26.                  </exclusion>
  27.                  <exclusion>
  28.                      <groupId>org.slf4j </groupId>
  29.                      <artifactId>jul-to-slf4j </artifactId>
  30.                  </exclusion>
  31.                  <exclusion>
  32.                      <groupId>org.springframework.boot </groupId>
  33.                      <artifactId>spring-boot-starter-tomcat </artifactId>
  34.                  </exclusion>
  35.              </exclusions>
  36.          </dependency>
  37.     
  38.          <dependency>
  39.              <groupId>org.activiti </groupId>
  40.              <artifactId>activiti-spring-boot-starter-basic </artifactId>
  41.              <version>6.0.0 </version>
  42.              <exclusions>
  43.                  <exclusion>
  44.                      <groupId>javax.persistence </groupId>
  45.                      <artifactId>persistence-api </artifactId>
  46.                  </exclusion>
  47.              </exclusions>
  48.          </dependency>
  49.          <dependency>
  50.              <groupId>org.springframework.boot </groupId>
  51.              <artifactId>spring-boot-starter-data-jpa </artifactId>
  52.          </dependency>
  53.          <dependency>
  54.              <groupId>org.springframework.boot </groupId>
  55.              <artifactId>spring-boot-starter-thymeleaf </artifactId>
  56.          </dependency>
  57.          <dependency>
  58.              <groupId>org.springframework.boot </groupId>
  59.              <artifactId>spring-boot-starter-test </artifactId>
  60.              <scope>test </scope>
  61.          </dependency>
  62.     
  63.         
  64.      </dependencies>
  65.      <profiles>
  66.          <profile>
  67.              <id>local </id>
  68.              <properties>
  69.                  <spring.profiles.active>local </spring.profiles.active>
  70.              </properties>
  71.              <activation>
  72.                  <activeByDefault>true </activeByDefault>
  73.              </activation>
  74.          </profile>
  75.          <profile>
  76.              <id>dev </id>
  77.              <properties>
  78.                  <spring.profiles.active>dev </spring.profiles.active>
  79.              </properties>
  80.          </profile>
  81.         
  82.      </profiles>
  83.      <build>
  84.          <finalName>enn-activiti </finalName>
  85.          <plugins>
  86.              <plugin>
  87.                  <groupId>org.apache.maven.plugins </groupId>
  88.                  <artifactId>maven-compiler-plugin </artifactId>
  89.                  <configuration>
  90.                      <source>${java.version} </source>
  91.                      <target>${java.version} </target>
  92.                  </configuration>
  93.              </plugin>
  94.              <plugin>
  95.                  <groupId>org.springframework.boot </groupId>
  96.                  <artifactId>spring-boot-maven-plugin </artifactId>
  97.              </plugin>
  98.              <plugin>
  99.                  <groupId>org.apache.maven.plugins </groupId>
  100.                  <artifactId>maven-surefire-plugin </artifactId>
  101.                  <configuration>
  102.                      <skip>true </skip>
  103.                      <testFailureIgnore>true </testFailureIgnore>
  104.                  </configuration>
  105.              </plugin>
  106.          </plugins>
  107.      </build>
  108. </project>

1.2. 創建啟動類(componentScan是自己項目持久化模板,可以直接刪掉)


   
   
  
  
          
  1. @SpringBootApplication(exclude = SecurityAutoConfiguration.class)
  2. @ComponentScan(basePackages = {"enn.activiti","enn.base.redis.cluster",
  3. "enn.base.utils","enn.base.mysql.ordinary","enn.base.mysql.dao"})
  4. @EnableAsync
  5. public class Application {
  6. static ConfigurableApplicationContext applicationContext;
  7. public static void main(String[] args) {
  8. applicationContext = SpringApplication.run(Application.class, args);
  9. }

}

1.3. 配置application.yml


   
   
  
  
          
  1. # \u670D\u52A1\u7AEF\u53E3
  2. server:
  3. port: ${SERVER_PORT:8082}
  4. #\u6570\u636E\u5E93\u94FE\u63A5\u914D\u7F6E
  5. spring:
  6. datasource:
  7. name: ecityposition
  8. type: com.alibaba.druid.pool.DruidDataSource
  9. filters: stat
  10. url: jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf-8
  11. driver-class-name: com.mysql.jdbc.Driver
  12. username: root
  13. password: root
  14. #配置初始化大小/最小/最大
  15. initial-size: 1
  16. min-idle: 1
  17. max-active: 20
  18. #獲取連接等待超時時間
  19. max-wait: 60000
  20. #間隔多久進行一次檢測,檢測需要關閉的空閑連接
  21. time-between-eviction-runs-millis: 60000
  22. #一個連接在池中最小生存的時間
  23. min-evictable-idle-time-millis: 300000
  24. validation-query: SELECT 'x'
  25. test-while-idle: true
  26. test-on-borrow: false
  27. test-on-return: false
  28. #打開PSCache,並指定每個連接上PSCache的大小。oracle設為true,mysql設為false。分庫分表較多推薦設置為false
  29. pool-prepared-statements: false
  30. max-pool-prepared-statement-per-connection-size: 20
  31. jpa:
  32. properties:
  33. hibernate:
  34. hbm2ddl:
  35. auto: update
  36. jackson:
  37. date-format: yyyy-MM-dd HH:mm:ss
  38. time-zone: GMT+8
  39. activiti:
  40. check-process-definitions: false
  41. database-schema-update: true

 

1.4. 啟動可能出現的錯誤

上述已經解決,直接啟動沒有問題

  1.4.1 如果項目使用myibatis,則需要再依賴中排除persistence-api,否則會以下的錯誤:

    Consider defining a bean of type 'javax.persistence.EntityManagerFactory' in your configuration.

  1.4.2  在配置文件中設置不掃描processes文件包

    如果還沒有建bpmn模型,則會出現如下錯誤:

    java.io.FileNotFoundException: class path resource [processes/] cannot be resolved to URL because it does not exist

    另外,database-schema-update屬性,可選值為: false,true,create-drop,drop-create,默認為true。

     為true表示activiti會對數據庫中的表進行更新操作,如果不存在,則進行創建。

  1.4.3 在啟動類上排除SecurityAutoConfiguration類,否則報:

    java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy

因為GlobalAuthenticationConfigurerAdapter  是spring-boot-starter-security 依賴中的屬於安全配置類,  而 引入的activiti-spring-boot-starter-basic 依賴中存在了一個自動安全配置類,  兩個安全配置,  所以排除掉 activiti-spring-boot-starter-basic中的安全配置類  SecurityAutoConfiguration

 

二、編寫測試流程

 寫的較為簡單,但可通過如下進行測試,理解bpmn

 


   
   
  
  
          
  1. import enn.activiti.entity.vo.dbDict.DbDictTreeVo;
  2. import enn.activiti.entity.vo.dbDict.DbDictVo;
  3. import enn.activiti.service.ActivityConsumerService;
  4. import enn.activiti.utils.DictUtils;
  5. import enn.activiti.utils.common.ResultTreeBean;
  6. import enn.base.utils.web.ActionResult;
  7. import io.swagger.annotations.Api;
  8. import io.swagger.annotations.ApiOperation;
  9. import org.activiti.engine.ProcessEngine;
  10. import org.activiti.engine.ProcessEngines;
  11. import org.activiti.engine.task.Task;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.web.bind.annotation.*;
  15. import javax.annotation.Resource;
  16. import java.util.ArrayList;
  17. import java.util.HashMap;
  18. import java.util.List;
  19. import java.util.Map;
  20. /**
  21. * @auther: liuxianling
  22. * @date: 2018/12/2 21:38
  23. * @description:
  24. */
  25. @RestController
  26. @RequestMapping("/api/activiti")
  27. @Api(value = "/ActivityConsumerController", description = "ActivityConsumerController")
  28. public class ActivityConsumerController {
  29. private static final Logger logger = LoggerFactory.getLogger(DbDictController.class);
  30. @Resource
  31. ActivityConsumerService activityConsumerService;
  32. /**
  33. * 1:啟動流程實例
  34. */
  35. @ApiOperation(value = "啟動流程實例", notes = "啟動流程實例")
  36. @GetMapping("/testStartProcessInstance")
  37. public void testStartProcessInstance(@RequestParam("procdefId") String procdefId){
  38. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  39. processEngine.getRuntimeService()
  40. .startProcessInstanceById(procdefId); //這個是查看數據庫中act_re_procdef表
  41. }
  42. /**
  43. * 2.完成請假申請
  44. */
  45. @ApiOperation(value = "完成請假申請", notes = "完成請假申請")
  46. @GetMapping("/testQingjia")
  47. public void testQingjia(String taskId){
  48. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  49. processEngine.getTaskService()
  50. .complete(taskId); //查看act_ru_task表
  51. }
  52. /**
  53. * 3.班主任查詢當前任務
  54. */
  55. @ApiOperation(value = "班主任查詢當前任務", notes = "班主任查詢當前任務")
  56. @GetMapping("/taskAssignee")
  57. public void testQueryTask(String taskAssignee){
  58. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  59. List <Task> tasks = processEngine.getTaskService()
  60. .createTaskQuery()
  61. .taskAssignee(taskAssignee)
  62. .list();
  63. for (Task task : tasks) {
  64. System.out.println(task.getName());
  65. }
  66. }
  67. /**
  68. * 4.班主任完成任務
  69. */
  70. @ApiOperation(value = "班主任完成任務", notes = "班主任完成任務")
  71. @GetMapping("/testFinishTask_manager")
  72. public void testFinishTask_manager(String taskId){
  73. ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
  74. engine.getTaskService()
  75. .complete(taskId); //查看act_ru_task數據表
  76. }
  77. /**
  78. * 5.教務處主任完成任務
  79. */
  80. @ApiOperation(value = "教務處主任完成任務", notes = "教務處主任完成任務")
  81. @GetMapping("/testFinishTask_Boss")
  82. public void testFinishTask_Boss(String taskId){
  83. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  84. processEngine.getTaskService()
  85. .complete(taskId); //查看act_ru_task數據表
  86. }
  87. }

 

三、編寫bpmn

1.1 設置編碼

  1. 預防activiti亂碼,還需要修改啟動idea配置,增加如下

 

1.2 創建bpmn

 

 

1.3 編寫邏輯

1. StartEvent-->點擊空白處,定義流程名稱-->UserTask(請假流程,定義請假人)-->UserTask(班主任審批,定義班主任)-->userTask(教導處審批,定義教導處)-->EndEvent結束流程,如圖所示:

 

 

 

 

 

四、activiti數據庫表概覽

  1.1 說明

 

    Activiti工作流總共包含23張數據表,所有的表名默認以“ACT_”開頭。

並且表名的第二部分用兩個字母表明表的用例,而這個用例也基本上跟Service API匹配。

u  ACT_GE_* : “GE”代表“General”(通用),用在各種情況下;

u  ACT_HI_* : “HI”代表“History”(歷史),這些表中保存的都是歷史數據,比如執行過的流程實例、變量、任務,等等。Activit默認提供了4種歷史級別:

Ø  none: 不保存任何歷史記錄,可以提高系統性能;

Ø  activity:保存所有的流程實例、任務、活動信息;

Ø  audit:也是Activiti的默認級別,保存所有的流程實例、任務、活動、表單屬性;

Ø  full:最完整的歷史記錄,除了包含audit級別的信息之外還能保存詳細,例如:流程變量。

對於幾種級別根據對功能的要求選擇,如果需要日后跟蹤詳細可以開啟full

Acitiviti數據庫中表的命名都是以ACT_開頭的。第二部分是一個兩個字符用例表的標識。此用例大體與服務API是匹配的。

l  ACT_RE_*:’RE’表示repository。帶此前綴的表包含的是靜態信息,如,流程定義,流程的資源(圖片,規則等)。

l  ACT_RU_*:’RU’表示runtime。這是運行時的表存儲着流程變量,用戶任務,變量,職責(job)等運行時的數據。Activiti只存儲實例執行期間的運行時數據,當流程實例結束時,將刪除這些記錄。這就保證了這些運行時的表小且快。

l  ACT_ID_*:’ID’表示identity。這些表包含標識的信息,如用戶,用戶組,等等。

l  ACT_HI_*:’HI’表示history。就是這些表包含着歷史的相關數據,如結束的流程實例,變量,任務,等等。

l  ACT_GE_*:普通數據,各種情況都使用的數據。

 

1.2 概覽

1.2.1   Activiti數據表清單:

表分類

表名

解釋

一般數據

ACT_GE_BYTEARRAY

通用的流程定義和流程資源,用來保存部署文件的大文本數據

ACT_GE_PROPERTY

系統相關屬性,存儲這個流程引擎級別的數據

流程歷史記錄

		<p>&nbsp;</p>
		</td>
		<td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_HI_ACTINST" target="_blank"></a><a target="_blank">ACT_HI_ACTINST</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>歷史的流程實例</p>
		</td>
	</tr><tr><td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_HI_ATTACHMENT" target="_blank"></a><a target="_blank">ACT_HI_ATTACHMENT</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>歷史的流程附件</p>
		</td>
	</tr><tr><td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_HI_COMMENT" target="_blank"></a><a target="_blank">ACT_HI_COMMENT</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>歷史的說明性信息</p>
		</td>
	</tr><tr><td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_HI_DETAIL" target="_blank"></a><a target="_blank">ACT_HI_DETAIL</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>歷史的流程運行中的細節信息</p>
		</td>
	</tr><tr><td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_HI_IDENTITYLINK" target="_blank"></a><a target="_blank">ACT_HI_IDENTITYLINK</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>歷史的流程運行過程中用戶關系</p>
		</td>
	</tr><tr><td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_HI_PROCINST" target="_blank"></a><a target="_blank">ACT_HI_PROCINST</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>歷史的流程實例</p>
		</td>
	</tr><tr><td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_HI_TASKINST" target="_blank"></a><a target="_blank">ACT_HI_TASKINST</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>歷史的任務實例</p>
		</td>
	</tr><tr><td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_HI_VARINST" target="_blank"></a><a target="_blank">ACT_HI_VARINST</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>歷史的流程運行中的變量信息</p>
		</td>
	</tr><tr><td rowspan="4">
		<p><a name="OLE_LINK62" target="_blank"></a><a name="OLE_LINK61" target="_blank">用戶用戶組表</a></p>
		</td>
		<td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_ID_GROUP" target="_blank"></a><a target="_blank">ACT_ID_GROUP</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>身份信息-組信息</p>
		</td>
	</tr><tr><td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_ID_INFO" target="_blank"></a><a target="_blank">ACT_ID_INFO</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>身份信息-組信息</p>
		</td>
	</tr><tr><td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_ID_MEMBERSHIP" target="_blank"></a><a target="_blank">ACT_ID_MEMBERSHIP</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>身份信息-用戶和組關系的中間表</p>
		</td>
	</tr><tr><td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_ID_USER" target="_blank"></a><a target="_blank">ACT_ID_USER</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>身份信息-用戶信息</p>
		</td>
	</tr><tr><td rowspan="3">
		<p><a name="OLE_LINK25" target="_blank"></a><a name="OLE_LINK24" target="_blank">流程定義表</a></p>
		</td>
		<td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_RE_DEPLOYMENT" target="_blank"></a><a target="_blank">ACT_RE_DEPLOYMENT</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>部署單元信息,用來存儲部署時需要持久化保存下來的信息</p>
		</td>
	</tr><tr><td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_RE_MODEL" target="_blank"></a><a target="_blank">ACT_RE_MODEL</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>模型信息</p>
		</td>
	</tr><tr><td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_RE_PROCDEF" target="_blank"></a><a target="_blank">ACT_RE_PROCDEF</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>已部署的流程定義,業務流程定義數據表</p>

		<p>此表和ACT_RE_DEPLOYMENT是多對一的關系,即,</p>

		<p>一個部署的bar包里可能包含多個流程定義文件,</p>

		<p>每個流程定義文件都會有一條記錄在ACT_REPROCDEF表內,</p>

		<p>每個流程定義的數據,都會對於ACT_GE_BYTEARRAY表內</p>

		<p>的一個資源文件和PNG圖片文件。和ACT_GE_BYTEARRAY</p>

		<p>的關聯是通過程序用ACT_GE_BYTEARRAY.NAME與</p>

		<p>ACT_RE_PROCDEF.NAME_完成的,在數據庫表結構中沒有體現</p>
		</td>
	</tr><tr><td rowspan="6">
		<p><a name="OLE_LINK13" target="_blank"></a><a name="OLE_LINK12" target="_blank">運行實例表</a></p>
		</td>
		<td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_RU_EVENT_SUBSCR" target="_blank"></a><a target="_blank">ACT_RU_EVENT_SUBSCR</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>運行時事件</p>
		</td>
	</tr><tr><td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_RU_EXECUTION" target="_blank"></a><a target="_blank">ACT_RU_EXECUTION</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>運行時流程執行實例</p>
		</td>
	</tr><tr><td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_RU_IDENTITYLINK" target="_blank"></a><a target="_blank">ACT_RU_IDENTITYLINK</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>運行時用戶關系信息,主要存儲當前節點參與者的信息。</p>
		</td>
	</tr><tr><td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_RU_JOB" target="_blank"></a><a target="_blank">ACT_RU_JOB</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>運行時作業,運行時定時任務數據表</p>
		</td>
	</tr><tr><td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_RU_TASK" target="_blank"></a><a target="_blank">ACT_RU_TASK</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>運行時任務</p>
		</td>
	</tr><tr><td style="vertical-align:top;">
		<p><a name="headLOCAL_1-ACT_RU_VARIABLE" target="_blank"></a><a target="_blank">ACT_RU_VARIABLE</a></p>
		</td>
		<td style="vertical-align:top;">
		<p>運行時變量表</p>
		</td>
	</tr></tbody></table></div><p>注:</p>

l  流程文件部署主要涉及到3個表,分別是:ACT_GE_BYTEARRAY、ACT_RE_DEPLOYMENT、ACT_RE_PROCDEF。主要完成“部署包”-->“流程定義文件”-->“所有包內文件”的解析部署關系。從表結構中可以看出,流程定義的元素需要每次從數據庫加載並解析,因為流程定義的元素沒有轉化成數據庫表來完成,當然流程元素解析后是放在緩存中的,具體的還需要后面詳細研究。

l  流程定義中的java類文件不保存在數據庫里 。

l  組織機構的管理相對較弱,如果要納入單點登錄體系內還需要改造完成,具體改造方法有待研究。

l  運行時對象的執行與數據庫記錄之間的關系需要繼續研究

l  歷史數據的保存及作用需要繼續研究。

 

activiti-administrator

自帶的用戶管理系統,維護用戶和組,需要配置數據連接參數,在activiti-administrator\WEB-INF\applicationContext.xml中,並加入JDBC驅動包。

activiti-cycle

PVM活動檢測的,由activiti-rest提供服務,不需配置。

activiti-explorer

可以查看用戶任務和啟動流程,由activiti-rest提供服務,不需配置。

activiti-kickstart

簡單的點對點流程定義維護工具,需要配置數據連接,把activiti.cfg.xml文件放在classes下,並加入驅動包。

activiti-modeler

在線編輯和維護流程定義的工具,最后以文件夾方式部署,需要配置activiti-modeler\WEB-INF\classes\configuration.properties文件。

activiti-probe

PVM的觀測服務,由activiti-rest提供服務,不需配置,可以查看deployment、processdefinition、processinstance、database。

activiti-rest

其他幾個應用的服務提供者,需要配置數據連接,把activiti.cfg.xml文件放在classes下,並加入驅動包。

五,表結構變化

參考:https://blog.csdn.net/cs_hnu_scw/article/details/79059965

六. 具體表解析

https://blog.csdn.net/hj7jay/article/details/51302829

 

原文地址:https://blog.csdn.net/wudaoshihun/article/details/84655633#1.1%20%E8%AE%BE%E7%BD%AE%E7%BC%96%E7%A0%81
posted @ 2019-06-27 09:17  星朝  閱讀( 1684)  評論( 0編輯  收藏


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM