基础环境升级
Spring Boot 2.0 要求 Java 8 作为最低版本。
Spring Boot 2.0 通过了在 JDK 9 下的测试,可以在 JDK 9 下正常运行,同时 Spring Boot 2.0 宣布不再?支持
Java 6 和 7,最低 JDK 8,支持 JDK 9。
依赖组件升级
本次 Spring Boot 2.0 的升级,同时也升级了部分其依赖的第三
方组件,主要有以下几个:
默认软件替换和优化
默认连接池已从 Tomcat 切换到 HikariCP,HikariCP 是一个高性能的 JDBC 连接池。
HikariCP 号称是 Java 业界最快的数据库连接池。
HikariCP 性能为什什么如此突出?
Spring Security
Spring Security 是 Spring 社区的一个顶级项目,是 Spring Boot 官方推荐使用的 Security 框架。
除了常规
的 Authentication 和 Authorization 之外,Spring Security 还提供了了诸如 ACLs、LDAP、JAAS、CAS 等高级性以满足复杂场景下的安全需求。而 Spring Boot 中基于 Java 配置实现 Spring Security 功
能。Spring Boot 2 极大地简化了默认的安全配置,并使添加定制安全变得简单。
Spring Boot 2.0 ?常容易使用 Spring Security 5.0 保护响应式应用,当检测到 Spring Security 存在的时候会自动进行默认配置。
OAuth 2.0
OAuth 2.0 是 OAuth 协议的延续版本,不向后兼容 OAuth 1.0。OAuth 2.0 关注客户端开发者的简易性。要么通过组织在资源拥有者和 HTTP 服务商之间的被批准的交互动作代表用户,要
么允许第三方应用代表用户获得访问的权限。OAuth 2 是一个授权框架,它可以使第三方应?用程序或客户端获得对 HTTP 服务上(如
Google、GitHub )用户帐户信息的有限访问权限。OAuth 2 通过将用户身份验证委派给托管用户帐户的服务以及授权客户端访问用户帐户进行工作。Spring Boot 2.0 将 Spring Security OAuth 项目迁移到 Spring Security。不再提供单独的依赖包,Spring
Boot 2.0 通过 Spring Security 5 提供 OAuth 2.0 客户端支持。
Micrometer
Micrometer 是一款监控指标的度量类库,可以让你在没有供应商锁定的情况下对 JVM 的应用程序代码进?调整。
集成后提供 JVM 指标(包括 CPU、内存、线程和 GC)、Logback、Tomcat、Spring MVC 并且提供
RestTemplate。
Redis
Redis 默认引入了 Lettuce,替代了之前的 Jedis 作为底层的 Redis 连接方式。
Lettuce 是一个可伸缩的线程安全的 Redis 客户端,用于同步、异步和反应使用。多个线程可以共享同?一个
RedisConnection,它利用优秀 Netty NIO 框架来高效地管理多个连接,支持先进的 Redis 功能,如
Sentinel、集群、流水线、自动重新连接和 Redis 数据模型。
支持 HTTP/2
HTTP/2 是第二代的 HTTP 协议,Spring Boot 的 Web 容?选择中 Tomcat,Undertow 和 Jetty 均已?支持
HTTP/2。
JOOQ 的?支持
JOOQ 是基于 Java 访问关系型数据库的工具包。JOOQ 既吸取了传统 ORM 操作数据的简单性和安全性,
又保留了原生 SQL 的灵活性,它更像是介于 ORMS 和 JDBC 的中间层。对于喜欢写 SQL 的码农来说,
JOOQ 可以完全满足,可以是用 Java 代码写出 SQL 的感觉来。
新建 spring-boot-web 项目,在 pom.xml 中添加如下依赖。
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.rookie</groupId>
<artifactId>springboot-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-web</name>
<description>Demo project for Spring Boot web</description>
<properties>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
</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>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
</project>
创建实体对象 User
@Getter
@Setter
@ToString
public class User {
private String name;
private String address;
private int age;
}
上面代码使用 lombok 插件,只需要注解即可省略 getter/setter/toString 等方法
新建一个类 WebController,用于测试
@RestController
public class WebController {
@RequestMapping(value = "/getUser", method = RequestMethod.POST)
public User getUserInfo() {
User user = new User();
user.setName("我是菜鸟A");
user.setAddress("北京");
user.setAge(18);
return user;
}
@RequestMapping(value = "/getUsers", method = RequestMethod.POST)
public List<User> getUserListInfo() {
List<User> users = new ArrayList<>();
User user = new User();
user.setName("我是菜鸟A");
user.setAddress("北京");
user.setAge(18);
users.add(user);
User user2 = new User();
user2.setName("我是菜鸟B");
user2.setAddress("南京");
user2.setAge(28);
users.add(user2);
return users;
}
@RequestMapping(value = "/get/{name}", method = RequestMethod.GET)
public String getName(@PathVariable String name) {
return name;
}
}
测试结果,使用 postman 进行模拟访问(使用 postman 的时候注意对应正确的请求的方式)
localhost:8080/getUser
{
"name": "我是菜鸟A",
"address": "北京",
"age": 18
}localhost:8080/getUsers
[
? {
"name": "我是菜鸟A",
"address": "北京",
"age": 18
},
? {"name": "我是菜鸟B",
"address": "南京",
"age": 28
}
]localhost:8080/get/rookie
control 控制台会返回 :rookie
原文:https://www.cnblogs.com/miantiao312/p/11042768.html