基礎環境升級java
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。
依賴組件升級web
本次 Spring Boot 2.0 的升級,同時也升級了部分其依賴的第三方組件,主要有如下幾個:
默認軟件替換和優化spring
默認鏈接池已從 Tomcat 切換到 HikariCP,HikariCP 是一個高性能的 JDBC 鏈接池。HikariCP 號稱是 Java 業界最快的數據庫鏈接池。數據庫
HikariCP 性能爲什什麼如此突出?apache
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.0springboot
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