springboot-入門(一)

一、Spring Boot 2.0 更新了什麼

  • 基礎環境升級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 的升級,同時也升級了部分其依賴的第三方組件,主要有如下幾個:
    • Jetty 9.4,Jetty 是⼀個開源的 Servlet 容器器,它是基於 Java 的 Web 內容,例如 JSP 和 Servlet 提供運行環境。Jetty 是使用 Java 語言編寫的,它的 API 以一組 JAR 包的形式發佈。
    • Tomcat 8.5,Apache Tomcat 8.5.x 旨在取代 8.0.x,徹底⽀持 Java 9。
    • Flyway 5,Flyway 是獨⽴於數據庫的應用、管理並跟蹤數據庫變更的數據庫版本管理工具。用通俗的話講,Flyway 能夠像 SVN 管理不一樣人的代碼那樣,管理不同人的 SQL 腳本,從而作到數據庫同步。
    • Hibernate 5.2,Hibernate 是⼀一款很是流行的 ORM 框架。
    • Gradle 3.4,Spring Boot 的 Gradle 插件在很⼤大程度上已被重寫,有了了重⼤大的改進。
    • Thymeleaf 3.0,Thymeleaf 3 相對於 Thymeleaf 2 有很是大的性能提高。
  • 默認軟件替換和優化spring

    默認鏈接池已從 Tomcat 切換到 HikariCP,HikariCP 是一個高性能的 JDBC 鏈接池。

    HikariCP 號稱是 Java 業界最快的數據庫鏈接池。數據庫

    HikariCP 性能爲什什麼如此突出?apache

    • 字節碼精簡:優化代碼,直到編譯後的字節碼最少,這樣CPU 緩存能夠加載更多的程序代碼。
    • 優化代理和攔截器:減小代碼,例如 HikariCP 的 Statement proxy 只有 100 行代碼。
    • 自定義數組類型(FastStatementList)代替 ArrayList:避免每次 get() 調用都要行 range check,避
      免調用 remove() 時從頭至尾的掃描。
    • 自定義集合類型(ConcurrentBag):提升併發讀寫的效率。
    • 其餘針對 BoneCP 缺陷的優化,好比對於耗時超過一個 CPU 時間片的方法調用的研究。
  • 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 2.0 入門程序

  • 新建 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

相關文章
相關標籤/搜索