不知不觉离2009年都有十年了,我想这大概是许多85后都会有的感慨。而对于自己来说,这十年更加的特殊一些。因为我是2009年正式参加工作的。这些年java技术乃至整个软件行业的技术都在突飞猛进,甚至曾经的许多的模式都开始发生变化了。趁着这些天有些有空,今天就来记录下如何用springboot整合mybatis、thymeleaf、H-ui及springSecurity来搭建一个通用mvc的后台。算是为自己渐渐淡出mvc写一曲挽歌吧。
spring、springMvc、maven、mybatis
概念可以自己问百度。这里先打个不太恰当的比方,如果说spring框架是电脑硬件中的主板的话,那么spring boot就是一台配置好了的电脑主机了。
还记得ssh2(struts2、hibernate、spring),那些繁琐的配置文件、不同框架之间版本的兼容、jar包精简的管理等。这些无疑增加了开发的成本。
springboot的出现,轻松的解决了这些问题。相当于,我们再也不需要自己拿着主板、硬盘、内存条去组装和调试了。集成其它框架更像是只要拿着各样的数码产品接上主机的USB接口。那么spring boot到底是什么呢?
Spring Boot 就是为了简化开发模式,是在Spring(严格的说是spring4.0及以上)的基础之上产生的,让开发者能够快速的开发出基于Spring的应用。 Spring Boot内嵌了一个tomcat,我们再也不需要将项目打包成war放入tomcat了。而是打包为一个 jar 包, 在启动时根据 web 服务器的配置进行加载。
这里还是说明下,现在的互联网项目在设计的时候都开始采用AKF扩展立方的思维方式了。传统的项目在AKF思维方式当中只是一个点。而AKF的出现是让项目能够向立体方向无限扩展(如果有空我再写一篇关于AKF扩展立方的博客)。而今天搭建的还是一个传统的mvc项目,为中小型系统做一个通用的模板。这里还是以我以前用thinkPhp5与H-ui搭建的博客管理系统来做业务,再整合springSecurity与RBAC数据模型来做安全防御与角色赋权。
|-博客管理
|-|-博客分类
|-|-博客列表
|-|-公告管理
|-系统管理
|-|-数据字典
|-|-管理员列表
|-|-角色列表
|-|-功能列表
|-|-密码修改
用到的软件开发环境是:jdk1.8、maven3.5.0、eclipse-jee-oxygen64位版本。项目的搭建只要用eclipse搭建一个简单的maven项目就可以,如图:
这里说明下,我们选择使用1.5.19,关于开源软件的版本,有些朋友们对版本中的数字和英文字母还有些疑问,这里花些时间说明下。以我们使用的springboot为例:
软件版本号: 1.5.19.RELEASE
1: 主版本号。 当功能模块有较大更新或者整体架构发生变化时, 主版本号会更新。
5: 次版本号。 次版本表示只是局部的一些变动。
19: 修改版本号。 一般是 bug 的修复或者是小的变动。
RELEASE:希腊字母版本号。 此版本号用于标注当前版本的软件处于哪个开发阶段。
关于希腊字母版本号所代表的开发阶段,这里也说明下:
Base: 设计阶段。 只有相应的设计没有具体的功能实现。
Alpha: 软件的初级版本。 存在较多的 bug。
Bate: 相对 alpha 版本, 消除了严重的 bug, 还是存在一些潜在的 bug。
Release: 该版本表示最终版。
我们也常常会看见一些GA、M1(M2,M3)、SR1(SR2、SR3)等这样的突出标识,它们又代表什么呢?
这些标识代表的是版本的发布计划说明,这里也一一列举说明下:
BUILD-.0.0.1:开发版。一般团队内部使用。
SHAPSHOT:快照版。仍在改进当中。
GA :稳定版。内部版本经过功能集成与全面测试后没有问题,并且可以对外发行了。也就是GA(General Availability),可以使用了。
PRE(M1、M2):里程碑版。也就是milestone,主要是修复一些BUG,GA后一般会有多个里程碑版版本(M1、M2)。
RC(RC1、RC2):候选发布版。也就是ReleaseCandidate,这是一个正式发布前的一个观察期。只会对高级BUG修复,也有可以多个版本(RC1、RC2)。
SR(SR1、SR2):正式发布版。公开正式发布,一般是用来修复大的BUG,也有可以有多个版本(SR1、SR2)。
通过对以上的了解,那么关于版本的选择,就比较有底气了。那么我们只要进入spring的官网并进入springboot项目
https://spring.io/projects/spring-boot#learn
如图:
我们只要将上图中的路标保存到项目的pom中,就集成了springBoot,并且已经拥有基本的web环境了(含有spring-boot-starter-web坐标)。
这里我们写一个小小的测试用例:
package com.ruiyi;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@GetMapping("/hello")
public String hello() {
return "hello spring boot";
}
}
上面的代码解释下:对于springboot的启动类只要有@SpringBootApplication与main方法就够了。这里加了@RestController和hello方法只是为了方便测试,完全可以写一个标准的controller来测试。效果如图:
作为一个项目,就不像教学那样只是一些琐碎的知识点了。这里说明下当前项目的结构与作用,如图:
所有业务的CURD都放置在business中,其中web中的admin、home、app分别存放PC后台、PC前端、手机app接口的controller。
对于common包及其子包的说明:
base存放CURD基础的接口;
security存放关于springSecurity的应用的所有类;
util存放一些常用的自定义工具类。
pom中所用到的坐标与说明,注意,这里只是项目初始构建所要用到的一些坐标,随着项目的深入,会对逐一加入的坐标进行说明。这里面所说的坐标指的是pom.xml中的dependency标签。
这里再提出一个问题,有的时候我们想用一个工具jar包,我们怎么知道springboot导入的坐标是否包含这个jar呢,如果包含,又是哪个版本呢?将问题简化下就是,我们如何查看springboot坐标所包含的jar?这里就直接上图:
只要到这里查找对应的groupId就可以了。了解了这些后,我们就可以很放心的管理当前项目的maven坐标了。以下是当前项目的基础坐标。
4.0.0
com.ruiyi.blog
blog
0.0.1-SNAPSHOT
com.ruiyi.Application
1.8
3.3.2
2.4
1.3.1
org.springframework.boot
spring-boot-starter-parent
1.5.19.RELEASE
org.springframework.boot
spring-boot-starter-web
org.apache.commons
commons-lang3
${commons-lang3.version}
commons-io
commons-io
${commons-io.version}
commons-fileupload
commons-fileupload
${commons-fileupload.version}
org.springframework.boot
spring-boot-maven-plugin
对于springboot项目的配置,有properties与yml这两种方式。
我们这个项目中系统级的配置使用yml,对比于properties配置文件,yml显得更加的有层次感。关于yml的语法,可以自行百度,这里只强调一点,不要使用Tab键来缩进,yml是不认的,对于缩进只能使用空格。
而对于一些涉及到业务的系统配置,我们可以采用properties为配置文件。这些只是一些个人习惯,大家按自己的习惯操作就可以。配置文件是放在src/main/resource的根目录下,这里先上下目前的配置代码application.yml
#内置tomcat配置
server:
port: 8090
context-path: /
session-timeout: 30
tomcat.uri-encoding: UTF-8
关于springboot的最基本说明就到这里。下一篇讲述springboot如何集成logback。