Activiti与Spring Boot的项目开发

编程语言及工具

104人已加入

描述

工作流Activiti6电子书:

工作流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所示。

Activiti

图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所示。

Activiti

图16-10导入Maven项目

开发第一个Web应用

本案例所使用的Spring Boot版本为1.5.4。在Eclipse中新建Maven项目,如图16-11至图16-13所示。

Activiti

图16-11新建Maven项目

Activiti

图16-12新建Maven项目

在新建时,注意选上“Create a simple project”,只新建一个最简单的工程。

Activiti

图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">

4.0.0

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所示。

Activiti

图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所示。

Activiti

图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,可以看到界面输出。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分