文章目录
SpringBoot开发常用技术整合
第一章:基础介绍
1-1 简介说明
SpringBoot简介
- 微框架,与Spring4一起诞生,比如@RestController
- 可以快速上手,整合了一些子项目(开源框架或者第三方开源库)
- 可以依赖很少的配置就可以十分快速的搭建并且运行项目
SpringBoot特点
- Spring全家桶的一员:基于Spring,使开发者快速入门,门槛很低
- SpringBoot可以创建独立运行的应用而不依赖于容器
- 不需要打成war包,可以放入tomcat中直接运行
- 提供maven极简配置,缺点就是会引入很多不需要的包
- 根据项目来依赖,从而配置Spring,需要什么引用什么
- 提供可视化的相关功能,方便监控,比如性能、应用的健康程度等
- 简化配置,不用再看过多的xml,使用注解进行配置
- 为微服务SpringCloud铺路,SpringBoot可以整合很多框架来构建微服务,比如Dubbo、Thrift等
SpringBoot使用场景
- 有Spring的地方都可以使用SpringBoot
- JavaWeb项目:JavaEE项目等
- 微服务:SpringCloud微服务开发的基础
第二章:构建springboot工程
2-1 首个项目
Spring官方提供的项目骨架生成地址
代码编写
1.创建名为boot-start的maven项目pom文件如下
<?xml version="1.0" encoding="UTF-8"?>
<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>com.myimooc</groupId>
<artifactId>boot-start</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>boot-start</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--spring boot 热启动模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!--optional = true,表示依赖不会传递,即该项目依赖 devtools;如果有其它项目依赖该项目,则其它项目不会自动依赖 devtools-->
<optional>true</optional>
</dependency>
<!--spring boot 配置文件加载模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<!--引入 Freemarker 模版引擎依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!--引入 Thymeleaf 模版引擎依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--<dependency>-->
<!--<groupId>com.alibaba</groupId>-->
<!--<artifactId>druid</artifactId>-->
<!--<version>1.1.0</version>-->
<!--</dependency>-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!--mapper-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>1.2.4</version>
</dependency>
<!--pagehelper-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
<!--<dependency>-->
<!--<groupId>com.alibaba</groupId>-->
<!--<artifactId>druid-spring-boot-starter</artifactId>-->
<!--<version>1.1.0</version>-->
<!--</dependency>-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
<!--引入redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.编写BootStartApplication类
package com.myimooc.boot.start;
import org.n3r.idworker.Sid;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import tk.mybatis.spring.annotation.MapperScan;
/**
* <br>
* 标题: 启动类<br>
* 描述: 首个SpringBoot项目<br>
* 使用 @EnableScheduling 开启支持定时任务
* 使用 @EnableAsync 开启异步执行程序
* @author zc
* @date 2018/04/19
*/
@SpringBootApplication
@MapperScan("com.myimooc.boot.start.dao.mapper")
@EnableScheduling
@EnableAsync
public class BootStartApplication {
public static void main(String[] args) {
SpringApplication.run(BootStartApplication.class, args);
}
@Bean
public Sid sid() {
return new Sid();
}
}
3.编写HelloController类
package com.myimooc.boot.start.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <br>
* 标题: 基于REST的Controller<br>
* 描述: 直接返回方法的响应内容<br>
*
* @author zc
* @date 2018/04/19
*/
@RestController
public class HelloController {
@GetMapping("/hello")
public Object hello(){
return "Hello SpringBoot!";
}
}
然后启动BootStartApplication,访问http://localhost:8080/hello
2-2 使用Spring官方STS搭建SpringBoot工程
spring Initializr方式生成SpringBoot工程
第三章 springboot接口返回json
3-1 SpringBoot 构造并且返回一个json对象
通常一个应用都会有一个统一的响应对象,用于封装响应状态、响应消息、响应数据等,并提供一些常用静态方法
代码编写
1.编写JsonResult类
package com.myimooc.boot.start.domain;
import java.io.Serializable;
/**
* <br>
* 标题: 自定义JSON响应数据结构<br>
* 描述: 统一请求响应返回的格式<br>
* 200 成功
* 500 错误,错误信息在msg字段中
* 501 Bean验证错误信息,以map返回
* 502 拦截器拦截到用户token出错
* 555:抛出异常信息
* @author zc
* @date 2018/04/19
*/
public class JsonResult implements Serializable{
private static final long serialVersionUID = 4997293587553904193L;
/**
* 响应状态
*/
private Integer status;
/**
* 响应消息
*/
private String msg;
/**
* 响应数据
*/
private Object data;
public static JsonResult build(Integer status,String msg,Object data){
return new JsonResult(status,msg,data);
}
public static JsonResult ok(Object data){
return new JsonResult(200,"ok",data);
}
public static JsonResult ok(){
return JsonResult.ok(null);
}
public static JsonResult errMsg(String msg){
return new JsonResult(500,msg,null);
}
public static JsonResult errMap(Object data){
return new JsonResult(501,"error",data);
}
public static JsonResult errTokenMsg(String msg){
return new JsonResult(502,msg,null);
}
public static JsonResult errException(String msg){
return new JsonResult(555,msg,null);
}
public JsonResult() {
}
public JsonResult(Integer status, String msg, Object data) {
this.status = status;
this.msg = msg;
this.data = data;
}
@Override
public String toString() {
return "JsonResult{" +
"status=" + status +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Str