工作流Activiti6教學視頻:
Activiti與Spring BootSpring Boot項目簡介
開發一個全新的項目,需要先進行開發環境的搭建,例如要確定使用的技術框架、確定框架的版本,還要考慮各個框架之間的版本兼容問題,完成這些繁瑣的工作后,還要對新項目進行配置,測試能否正常運行,最后才將搭建好的環境提交給項目組的其他成員使用。經常出現的情形是,表面上已經成功運行,但部分項目組成員仍然無法運行,項目初期浪費大量的時間做這些工作,幾乎每個項目都會投入部分工作量來做這些固定的事情。
受Ruby On Rails、Node.js等技術的影響,JavaEE領域需要一種更為簡便的開發方式,來取代這些繁瑣的項目搭建工作。在此背景下,Spring推出了Spring Boot項目,該項目可以讓使用者更快速的搭建項目,使用者可以更專注、快速的投入到業務系統開發中。系統配置、基礎代碼、項目依賴的jar包,甚至是開發時所用到的應用服務器等,Spring Boot已經幫我們準備好,只要在建立項目時,使用構建工具加入相應的Spring Boot依賴包,項目即可運行,使用者無需關心版本兼容等問題。
Spring Boot支持Maven和Gradle這兩款構建工具。Maven是一款目前較為流行的項目構建工具,通過pom.xml文件來定義項目的配置信息。Gradle使用Groovy語言進行構建腳本的編寫,與Maven、Ant等構建工具有良好的兼容性。鑒于筆者使用Maven較多,因此本書使用Maven作為項目構建工具。筆者成書時,Spring Boot最新的正式版本為1.5.4,要求Maven版本為3.2或以上。
下載與安裝Maven
Apache Maven是一個著名的項目構建工具,使用Maven可以讓項目構建變得簡單。Maven將項目的構建信息,存放在pom.xml文件中,Maven的繼承特性,讓管理大型的、結構復雜的項目更為簡單。
Maven擁有眾多特性,對于本章來說,最為重要的是它對依賴包的管理,Maven將項目所使用的依賴包的信息放到pom.xml的dependencies節點。例如我們需要使用spring-core模塊的jar包,只需在pom.xml配置該模塊的依賴信息,Maven會自動將spring-beans等模塊也一并引入到我們項目的環境變量中。正是由于此特性,使得Maven與Spring Boot更加相得益彰,可以讓我們更快速的搭建一個可用的開發環境。
本書所使用的Maven版本為3.5,可以到Maven官方網站下載:。下載并解壓后得到Maven的主目錄,將主目錄下的的bin目錄加入到系統的環境變量中,如圖16-9所示。
圖16-9修改系統環境變量
修改完成后,打開命令行,輸入mvn–version命令,看到當前的Maven版本即證明安裝成功。Maven下載的jar包會存放到本地倉庫中,默認路徑為:C:\Users\用戶名\.m2\repository。
以前版本的Eclipse,需要額外安裝Maven插件,但最近幾個版本的Eclipse,已經內置了Maven插件,因此我們可以直接在Eclipse使用Maven。Eclipse自帶的Maven版本為3.2,可以通過配置指定我們所安裝的3.5版本。
注意:在Eclipse中導入本章Maven項目時,要選擇“Existing Maven Project”項,如圖16-10所示。
圖16-10導入Maven項目
開發第一個Web應用
本案例所使用的Spring Boot版本為1.5.4。在Eclipse中新建Maven項目,如圖16-11至圖16-13所示。
圖16-11新建Maven項目
圖16-12新建Maven項目
在新建時,注意選上“Create a simple project”,只新建一個最簡單的工程。
圖16-13新建Maven項目
填入必要的項目信息,點擊“Finish”即完成項目的創建。創建完成后,會自動創建項目結構和pom.xml文件。新建完一個新項目后,如果要想使它具Web容器的功能,要加入Spring Boot的web啟動模塊,加入依賴后,pom.xml文件的內容如代碼清單16-26所示。
代碼清單16-26:codes\16\16.4\boot-web\pom.xml
xsi:schemaLocation=" http://maven.apache.org/xsd/maven-4.0.0.xsd">
org.crazyit.activiti
boot-web
0.0.1-SNAPSHOT
war
org.springframework.boot
spring-boot-starter-web
1.5.4.RELEASE
代碼清單16-26的粗體配置,為spring-boot-starter-web模塊的依賴,該模塊會自動幫我們加入其他的Spring模塊,例如spring-context、spring-beans、spring-mvc等等,還會自動加上嵌入的Tomcat模塊,接下來只需要編寫一個啟動類,即可完成Web項目的搭建。代碼清單16-27為啟動類。
代碼清單16-27:codes\16\16.4\boot-web\src\main\java\org\crazyit\activiti\WebMain.java
@SpringBootApplication
public class WebMain {
public static void main(String[] args) {
SpringApplication.run(WebMain.class, args);
}
}
代碼清單16-27中使用了@SpringBootApplication注解,聲明這是一個SpringBoot應用,在main方法中使用SpringApplication來運行該應用類,運行后內置的Spring容器將會被啟動。運行WebMain類,看到以下信息,即證明成功啟動:
2017-07-18 10:16:39.097? INFO 3168 --- [?????????? main] o.s.j.e.a.AnnotationMBeanExporter??????? : Registering beans for JMX exposure on startup
2017-07-18 10:16:39.174? INFO 3168 --- [?????????? main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-07-18 10:16:39.179? INFO 3168 --- [?????????? main] org.crazyit.activiti.WebMain???????????? : Started WebMain in 3.608 seconds (JVM running for 4.128)
根據輸出信息可知,Tomcat的默認端口為8080,打開瀏覽器訪問:8080/,效果如圖16-14所示。
圖16-14訪問Tomcat
看圖16-13可知,這是一個錯誤頁面,由于我們并沒有編寫任何的Web控制器來處理請求,因此彈出錯誤頁面,下頁編寫一個最簡單的Web控制器來處理請求。修改WebMain類,將其作為一個控制器,如代碼清單16-28所示。
代碼清單16-28:codes\16\16.4\boot-web\src\main\java\org\crazyit\activiti\WebMain.java
@SpringBootApplication
@Controller
public class WebMain {
public static void main(String[] args) {
SpringApplication.run(WebMain.class, args);
}
@GetMapping("/welcome")
@ResponseBody
public Stringwelcome() {
return "歡迎訪問首頁";
}
}
WebMain類前加上了@Controller注解,聲明它是一個控制器,即MVC模式中的C角色。添加一個welcome方法,只返回文字,方法前使用@GetMapping注解設置訪問路徑,使用@ResponseBody聲明該方法返回的字符串為HTTP的響應內容,再次運行WebMain類,在瀏覽器訪問::8080/welcome,可以看到頁面信息為welcome方法返回的字符串。需要注意的是,Spring Boot的web模塊,默認使用的是SpringMVC。
Activiti與Spring Boot的整合
使用Spring Boot,只需要花很少的時間即可將整個環境搭建好,整個過程較為便捷,Activiti也提供了Spring Boot的模塊,在Maven的pom.xml文件中加入該模塊的依賴,即可快速的搭建一個可用的Activiti開發環境。新建一個名稱為activiti-boot的Maven項目,加入Activiti的boot模塊,代碼清單16-29為項目pom.xml的內容。
代碼清單16-29:codes\16\16.4\activiti-boot\pom.xml
xsi:schemaLocation=" http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
org.crazyit.activiti
activiti-boot
0.0.1-SNAPSHOT
org.activiti
activiti-spring-boot-starter-basic
6.0.0.RC1
org.springframework.boot
spring-boot-starter-web
1.2.6.RELEASE
mysql
mysql-connector-java
5.1.42
org.springframework
spring-core
4.2.5.RELEASE
代碼清單16-29中注意以下幾個小細節:
??????activiti-spring-boot-starter-basic模塊的版本為6.0.0.RC1,為成書時最新的版本。
??????spring-boot-starter-web的版本為1.2.6.RELEASE,我們在前面章節所使用的是1.5.4,由于Activiti使用的Spring Boot版本為1.2.6,因此我們這里也使用這個版本。
??????使用的spring-core版本為4.2.5RELEASE,正常情況下,并不需要聲明使用spring-core,但是由于activiti-spring-boot-starter-basic模塊引用的spring-core版本為4.1.7,如果使用該版本,啟動Spring容器時將會拋出異常,異常信息為:“java.lang.NoSuchMethodError: org.springframework.core.ResolvableType.forInstance(Ljava/lang/Object;)Lorg/springframework/core/ResolvableType;”。
??????由于我們的環境,Activiti連接的是MySQL數據庫,因此要加上MySQL的依賴包。
默認情況下,Spring Boot會到Classpath下讀取application.properties配置文件,該配置文件可以配置例如Tomat端口、數據源等信息。本例的Activiti要連接MySQL數據庫,因此需要配置數據源,代碼清單16-30為本例的application.properties內容。
代碼清單16-30:codes\16\16.4\activiti-boot\src\main\resources\application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/act
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
通過前面章節的學習,我們知道Spring在啟動時,會根據配置來實現自動的流程文件部署,Activiti的Spring Boot模塊同樣支持這個功能。默認情況下,它會讀取ClassPath下processes目錄里面的流程文件。新建一個簡單的流程,流程文件內容如代碼清單16-31所示。
代碼清單16-31:codes\16\16.4\activiti-boot\src\main\resources\processes\test1.bpmn
targetRef="usertask1">
流程只一個UserTask,流程的id為“testProcess”,新建完流程文件后,本例的項目結構如圖16-15所示。
圖16-15項目結構
接下來,在Controller中調用Activiti的API,來查詢流程的部署數據,編寫Spring類和Controller類,如代碼清單16-32所示。
代碼清單16-32:
codes\16\16.4\activiti-boot\src\main\java\org\crazyit\activiti\ActMain.java
codes\16\16.4\activiti-boot\src\main\java\org\crazyit\activiti\controller\MyController.java
@SpringBootApplication
public class ActMain {
public static void main(String[] args) {
SpringApplication.run(ActMain.class, args);
}
}
@Controller
public class MyController {
@Autowired
private RepositoryService repositoryService;
@RequestMapping("/welcome")
@ResponseBody
public String welcome() {
return "調用流程存儲服務,查詢部署數量:"
+ repositoryService.createDeploymentQuery().count();???
}
}
MyController類中,將Activiti的流程存儲服務對象RepositoryService的實例,通過自動裝配的方式注入到MyController類中,welcome方法中使用RepositoryService來查詢部署數據。需要注意的是,Spring Boot的spring-boot-starter-web模塊,在1.2.6版本中不支持@GetMapping注解。運行ActMain類的main方法,訪問:8080/welcome,可以看到界面輸出。
?
評論
查看更多