工作流Activiti6教學(xué)視頻:
Activiti與Spring BootSpring Boot項目簡介
開發(fā)一個全新的項目,需要先進行開發(fā)環(huán)境的搭建,例如要確定使用的技術(shù)框架、確定框架的版本,還要考慮各個框架之間的版本兼容問題,完成這些繁瑣的工作后,還要對新項目進行配置,測試能否正常運行,最后才將搭建好的環(huán)境提交給項目組的其他成員使用。經(jīng)常出現(xiàn)的情形是,表面上已經(jīng)成功運行,但部分項目組成員仍然無法運行,項目初期浪費大量的時間做這些工作,幾乎每個項目都會投入部分工作量來做這些固定的事情。
受Ruby On Rails、Node.js等技術(shù)的影響,JavaEE領(lǐng)域需要一種更為簡便的開發(fā)方式,來取代這些繁瑣的項目搭建工作。在此背景下,Spring推出了Spring Boot項目,該項目可以讓使用者更快速的搭建項目,使用者可以更專注、快速的投入到業(yè)務(wù)系統(tǒng)開發(fā)中。系統(tǒng)配置、基礎(chǔ)代碼、項目依賴的jar包,甚至是開發(fā)時所用到的應(yīng)用服務(wù)器等,Spring Boot已經(jīng)幫我們準備好,只要在建立項目時,使用構(gòu)建工具加入相應(yīng)的Spring Boot依賴包,項目即可運行,使用者無需關(guān)心版本兼容等問題。
Spring Boot支持Maven和Gradle這兩款構(gòu)建工具。Maven是一款目前較為流行的項目構(gòu)建工具,通過pom.xml文件來定義項目的配置信息。Gradle使用Groovy語言進行構(gòu)建腳本的編寫,與Maven、Ant等構(gòu)建工具有良好的兼容性。鑒于筆者使用Maven較多,因此本書使用Maven作為項目構(gòu)建工具。筆者成書時,Spring Boot最新的正式版本為1.5.4,要求Maven版本為3.2或以上。
下載與安裝Maven
Apache Maven是一個著名的項目構(gòu)建工具,使用Maven可以讓項目構(gòu)建變得簡單。Maven將項目的構(gòu)建信息,存放在pom.xml文件中,Maven的繼承特性,讓管理大型的、結(jié)構(gòu)復(fù)雜的項目更為簡單。
Maven擁有眾多特性,對于本章來說,最為重要的是它對依賴包的管理,Maven將項目所使用的依賴包的信息放到pom.xml的dependencies節(jié)點。例如我們需要使用spring-core模塊的jar包,只需在pom.xml配置該模塊的依賴信息,Maven會自動將spring-beans等模塊也一并引入到我們項目的環(huán)境變量中。正是由于此特性,使得Maven與Spring Boot更加相得益彰,可以讓我們更快速的搭建一個可用的開發(fā)環(huán)境。
本書所使用的Maven版本為3.5,可以到Maven官方網(wǎng)站下載:。下載并解壓后得到Maven的主目錄,將主目錄下的的bin目錄加入到系統(tǒng)的環(huán)境變量中,如圖16-9所示。
圖16-9修改系統(tǒng)環(huán)境變量
修改完成后,打開命令行,輸入mvn–version命令,看到當前的Maven版本即證明安裝成功。Maven下載的jar包會存放到本地倉庫中,默認路徑為:C:\Users\用戶名\.m2\repository。
以前版本的Eclipse,需要額外安裝Maven插件,但最近幾個版本的Eclipse,已經(jīng)內(nèi)置了Maven插件,因此我們可以直接在Eclipse使用Maven。Eclipse自帶的Maven版本為3.2,可以通過配置指定我們所安裝的3.5版本。
注意:在Eclipse中導(dǎo)入本章Maven項目時,要選擇“Existing Maven Project”項,如圖16-10所示。
圖16-10導(dǎo)入Maven項目
開發(fā)第一個Web應(yīng)用
本案例所使用的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”即完成項目的創(chuàng)建。創(chuàng)建完成后,會自動創(chuàng)建項目結(jié)構(gòu)和pom.xml文件。新建完一個新項目后,如果要想使它具Web容器的功能,要加入Spring Boot的web啟動模塊,加入依賴后,pom.xml文件的內(nèi)容如代碼清單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應(yīng)用,在main方法中使用SpringApplication來運行該應(yīng)用類,運行后內(nèi)置的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)
根據(jù)輸出信息可知,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注解設(shè)置訪問路徑,使用@ResponseBody聲明該方法返回的字符串為HTTP的響應(yīng)內(nèi)容,再次運行WebMain類,在瀏覽器訪問::8080/welcome,可以看到頁面信息為welcome方法返回的字符串。需要注意的是,Spring Boot的web模塊,默認使用的是SpringMVC。
Activiti與Spring Boot的整合
使用Spring Boot,只需要花很少的時間即可將整個環(huán)境搭建好,整個過程較為便捷,Activiti也提供了Spring Boot的模塊,在Maven的pom.xml文件中加入該模塊的依賴,即可快速的搭建一個可用的Activiti開發(fā)環(huán)境。新建一個名稱為activiti-boot的Maven項目,加入Activiti的boot模塊,代碼清單16-29為項目pom.xml的內(nèi)容。
代碼清單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中注意以下幾個小細節(jié):
??????activiti-spring-boot-starter-basic模塊的版本為6.0.0.RC1,為成書時最新的版本。
??????spring-boot-starter-web的版本為1.2.6.RELEASE,我們在前面章節(jié)所使用的是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;”。
??????由于我們的環(huán)境,Activiti連接的是MySQL數(shù)據(jù)庫,因此要加上MySQL的依賴包。
默認情況下,Spring Boot會到Classpath下讀取application.properties配置文件,該配置文件可以配置例如Tomat端口、數(shù)據(jù)源等信息。本例的Activiti要連接MySQL數(shù)據(jù)庫,因此需要配置數(shù)據(jù)源,代碼清單16-30為本例的application.properties內(nèi)容。
代碼清單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
通過前面章節(jié)的學(xué)習(xí),我們知道Spring在啟動時,會根據(jù)配置來實現(xiàn)自動的流程文件部署,Activiti的Spring Boot模塊同樣支持這個功能。默認情況下,它會讀取ClassPath下processes目錄里面的流程文件。新建一個簡單的流程,流程文件內(nèi)容如代碼清單16-31所示。
代碼清單16-31:codes\16\16.4\activiti-boot\src\main\resources\processes\test1.bpmn
targetRef="usertask1">
流程只一個UserTask,流程的id為“testProcess”,新建完流程文件后,本例的項目結(jié)構(gòu)如圖16-15所示。
圖16-15項目結(jié)構(gòu)
接下來,在Controller中調(diào)用Activiti的API,來查詢流程的部署數(shù)據(jù),編寫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 "調(diào)用流程存儲服務(wù),查詢部署數(shù)量:"
+ repositoryService.createDeploymentQuery().count();???
}
}
MyController類中,將Activiti的流程存儲服務(wù)對象RepositoryService的實例,通過自動裝配的方式注入到MyController類中,welcome方法中使用RepositoryService來查詢部署數(shù)據(jù)。需要注意的是,Spring Boot的spring-boot-starter-web模塊,在1.2.6版本中不支持@GetMapping注解。運行ActMain類的main方法,訪問:8080/welcome,可以看到界面輸出。
?
評論