工作流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所示。
图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>
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所示。
图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,可以看到界面输出。
Android Messages测试版将提供端对端的加密服务
武汉白沙洲长江大桥:应用北斗技术的检测系统全天候监控
垃圾处理器电机厂家推荐的选购方案
Bosch Sensortec推出新款6轴IMU传感器,可用于AR和VR硬件且延迟低于3毫秒
铅炭电池应用领域
Activiti与Spring Boot的项目开发
Tadiran 电池的预防错失有哪些?
中科创达发布全新HMI开发工具 可大幅降低编码工作量
高通和AWS致力于长期共同创新,加速实现软件定义出行的未来
薄膜瑕疵在线检测系统的原理以及功能的介绍
卡片机算什么 超袖珍数码相机相机登场
Fluke 438-II电机效率和电气性能综合测试仪的功能作用及特点
全新嵌入式教程、更新的 UltraFast 方法指南,现已上线!
每日一课 | 智慧灯杆工程设计设施整合原则
一种关于MEMS传感器基准电流源设计
浅谈串口屏的发展与应用
武汉新芯被紫光收购后将改名长江存储?
过压欠压保护器能作为总开关吗
中智盛安智慧消防管理系统一站式消防解决方案专家
如何用电路实现检测过零点电压