疯狂Activiti6.0连载(20)Activiti与Spring Boot

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/boxiong86/article/details/78649648

 本文节选自《疯狂Workflow讲义(第2版)》

京东购买地址:https://item.jd.com/12246565.html

工作流Activiti6电子书http://blog.csdn.net/boxiong86/article/details/78488562

工作流Activiti6教学视频http://blog.csdn.net/boxiong86/article/details/78608585

ActivitiSpring Boot

Spring Boot项目简介

开发一个全新的项目,需要先进行开发环境的搭建,例如要确定使用的技术框架、确定框架的版本,还要考虑各个框架之间的版本兼容问题,完成这些繁琐的工作后,还要对新项目进行配置,测试能否正常运行,最后才将搭建好的环境提交给项目组的其他成员使用。经常出现的情形是,表面上已经成功运行,但部分项目组成员仍然无法运行,项目初期浪费大量的时间做这些工作,几乎每个项目都会投入部分工作量来做这些固定的事情。

Ruby On RailsNode.js等技术的影响,JavaEE领域需要一种更为简便的开发方式,来取代这些繁琐的项目搭建工作。在此背景下,Spring推出了Spring Boot项目,该项目可以让使用者快速的搭建项目,使用者可更专注、快速的投入到业务系统开发中系统配置、基础代码、项目依赖的jar,甚至是开发时所用到的应用服务器等,Spring Boot已经帮我们准备好,只要在建立项目时,使用构建工具加入相应的Spring Boot依赖包,项目即可运行,使用者无需关心版本兼容等问题。

Spring Boot支持MavenGradle这两构建工具Maven是一款目前较为流行的项目构建工具,通过pom.xml文件来定义项目的配置信息。Gradle使用Groovy语言进行构建脚本的编写,与MavenAnt等构建工具有良好的兼容性。鉴于笔者使用Maven较多,因此本书使用Maven作为项目构建工具。笔者成书时,Spring Boot最新的正式版本为1.5.4要求Maven版本为3.2或以上。

下载与安装Maven

Apache Maven是一个著名的项目构建工具,使用Maven可以让项目构建变得简单。Maven将项目的构建信息,存放在pom.xml文件中Maven的继承特性,让管理大型的、结构复杂的项目更为简单。

Maven拥有众多特性,对于本章来说,最为重要的是它对依赖包的管理,Maven将项目所使用的依赖包信息放到pom.xmldependencies节点。例如我们需要使用spring-core模块jar包,只需在pom.xml配置该模块的依赖信息,Maven会自动将spring-beans等模块也一并引入到我们项目的环境变量中。正是由于此特性,使得MavenSpring Boot更加相得益彰,可以让我们更快速的搭建一个可用的开发环境。

本书所使用的Maven版本为3.5,可以到Maven官方网站下载:http://maven.apache.org/下载并解压后得到Maven的主目录,将主目录下的的bin目录加入到系统的环境变量,如图16-9所示。


16-9修改系统环境变量

修改完成后,打开命令行,输入mvnversion命令,看到当前的Maven版本即证明安装成功。Maven下载的jar包会存放到本地仓库中,默认路径为:C:\Users\用户名\.m2\repository

以前版本的Eclipse,需要额外安装Maven插件,但最近几个版本的Eclipse,已经内置了Maven插件,因此我们可以直接在Eclipse使用MavenEclipse自带的Maven版本为3.2,可以通过配置指定我们所安装的3.5版本。

注意:在Eclipse中导入本章Maven项目时,要选择“Existing Maven Project”项,如图16-10所示。


16-10导入Maven项目

开发第一个Web应用

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



16-11新建Maven项目


16-12新建Maven项目

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


16-13新建Maven项目

填入必要的项目信息,点击“Finish”即完成项目的创建。创建完成后,会自动创建项目结构和pom.xml文件。新建完一个新项目后,如果要想使它具Web容器的功能,要加入Spring Bootweb启动模块,加入依赖后,pom.xml文件的内容如代码清单16-26所示。

代码清单16-26codes\16\16.4\boot-web\pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>org.crazyit.activiti</groupId>

    <artifactId>boot-web</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <packaging>war</packaging>

 

    <dependencies>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

            <version>1.5.4.RELEASE</version>

        </dependency>   

    </dependencies>

 

</project>

代码清单16-26的粗体配置,为spring-boot-starter-web模块的依赖,该模块会自动帮我们加入其他的Spring模块,例如spring-contextspring-beansspring-mvc等等,还会自动加上嵌入的Tomcat模块,接下来只需要编写一个启动类,即可完成Web项目的搭建。代码清单16-27为启动类。

代码清单16-27codes\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注解,声明这是一个Spring Boot应用,在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,打开浏览器访问http://localhost:8080/,效果如图16-14所示。


16-14访问Tomcat

看图16-13可知,这是一个错误页面,由于我们并没有编写任何的Web控制器来处理请求,因此弹出错误页面,下页编写一个最简单的Web控制器来处理请求。修改WebMain类,将其作为一个控制器,如代码清单16-28所示。

代码清单16-28codes\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类,在浏览器访问http://localhost:8080/welcome,可以看到页面信息为welcome方法返回的字符串。需要注意的是,Spring Bootweb模块,默认使用的是SpringMVC

 

ActivitiSpring Boot的整合

使用Spring Boot,只需要花很少的时间即可将整个环境搭建好,整个过程较为便捷,Activiti也提供了Spring Boot的模块,在Mavenpom.xml文件中加入该模块的依赖,即可快速的搭建一个可用的Activiti开发环境。新建一个名称为activiti-bootMaven项目,加入Activitiboot模块,代码清单16-29为项目pom.xml的内容。

代码清单16-29codes\16\16.4\activiti-boot\pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>org.crazyit.activiti</groupId>

    <artifactId>activiti-boot</artifactId>

    <version>0.0.1-SNAPSHOT</version>

 

    <dependencies>

        <dependency>

            <groupId>org.activiti</groupId>

            <artifactId>activiti-spring-boot-starter-basic</artifactId>

            <version>6.0.0.RC1</version>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

            <version>1.2.6.RELEASE</version>

        </dependency>

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <version>5.1.42</version>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-core</artifactId>

            <version>4.2.5.RELEASE</version>

        </dependency>

    </dependencies>

 

</project>

代码清单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-30codes\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在启动时,会根据配置来实现自动的流程文件部署,ActivitiSpring Boot模块同样支持这个功能。默认情况下,会读取ClassPathprocesses目录里面的流程文件。新建一个简单的流程,流程文件内容如代码清单16-31所示。

代码清单16-31codes\16\16.4\activiti-boot\src\main\resources\processes\test1.bpmn

    <process id="testProcess" name="My process" isExecutable="true">

        <startEvent id="startevent1" name="Start"></startEvent>

        <userTask id="usertask1" name="My Task"></userTask>

        <endEvent id="endevent1" name="End"></endEvent>

        <sequenceFlow id="flow1" sourceRef="startevent1"

            targetRef="usertask1"></sequenceFlow>

        <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>

    </process>

流程只一个UserTask,流程的id为“testProcess”,新建完流程文件后,本例的项目结构如图16-15所示。


16-15项目结构

接下来,在Controller中调用ActivitiAPI,来查询流程的部署数据,编写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 Bootspring-boot-starter-web模块,在1.2.6版本中不支持@GetMapping注解。运行ActMain类的main方法,访问http://localhost:8080/welcome,可以看到界面输出。

本例中仅仅调用了存储服务来查询数据,如果需要使用其他服务组件,可以通过同样的方式注入,在此不再赘述。

京东购买地址:https://item.jd.com/12246565.html

工作流Activiti6电子书http://blog.csdn.net/boxiong86/article/details/78488562

工作流Activiti6教学视频http://blog.csdn.net/boxiong86/article/details/78608585

本书代码共享地址:https://gitee.com/yangenxiong/CrazyActiviti

猜你喜欢

转载自blog.csdn.net/boxiong86/article/details/78649648
今日推荐