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 的升级,同时也升级了部分其依赖的第三方组件,主要有以下几个:
HikariCP 号称是 Java 业界最快的数据库连接池。 HikariCP 性能为什什么如此突出?
除了常规
的 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 协议的延续版本,不向后兼容 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 客户端支持。
集成后提供 JVM 指标(包括 CPU、内存、线程和 GC)、Logback、Tomcat、Spring MVC 并且提供
RestTemplate。
Lettuce 是一个可伸缩的线程安全的 Redis 客户端,用于同步、异步和反应使用。多个线程可以共享同⼀一个
RedisConnection,它利用优秀 Netty NIO 框架来高效地管理多个连接,支持先进的 Redis 功能,如
Sentinel、集群、流水线、自动重新连接和 Redis 数据模型。
HTTP/2 是第二代的 HTTP 协议,Spring Boot 的 Web 容器选择中 Tomcat,Undertow 和 Jetty 均已⽀支持
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 的时候注意对应正确的请求的方式)
{ "name": "我是菜鸟A","address": "北京","age": 18}
[ {"name": "我是菜鸟A", "address": "北京", "age": 18},
{"name": "我是菜鸟B", "address": "南京","age": 28} ]
control 控制台会返回 :rookie