微服務
現在微服務越來越火了,Spring Boot熱度蹭蹭直升,自學下。
微服務其實是服務化思路的一種最佳實踐方向,遵循SOA(面向服務的架構)的思路,各個企業在服務化治理上面的道路已經走得很遠了,整個軟件交付鏈上各個環節的基礎設施逐漸成熟了,微服務就誕生了。
微服務給我們也帶來了很多挑戰,服務“微”化之后,一個顯著的特征就是服務的數量增多了。如果將軟件開發和交付也作為一種生產模式的看待,那么數量眾多的微服務實際上就類似於傳統生產線上的產品,而在傳統生產模式下,為了能夠高效地生產大量產品,通常采用的就是標准化生產。
學習
Spring Boot只是簡化了spring 全家桶的配置,它使用“習慣優於配置”(Convention Over Configuration 項目中存在大量的配置,此外還內置了一個習慣性的配置,讓你無需手動進行配置)的理念讓你的項目快速運行起來。使用Spring Boot很容易創建一個獨立運行(運行jar,內嵌Servlet容器)、准生產級別的基於Spring框架的項目,使用Spring Boot你可以不用或者只需要很少的Spring配置。
核心
- 自動配置:針對很多Spring應用程序常見的應用功能,Spring Boot能自動提供相關配置。
- 起步依賴:告訴Spring Boot需要什么功能,它就能引入需要的庫。
- 命令行界面:這是Spring Boot的可選特性,借此你只需寫代碼就能完成完整的應用程序,無需傳統項目構建。
- Actuator:讓你能夠深入運行中的Spring Boot應用程序,一探究竟。
入門:搭建一個Spring Boot Web
初始化
我是使用的IDEA,它已經集成了Spring Boot。
選擇file - 新建一個項目,選擇Spring Initializr
注意我選擇的jdk 是1.8 ,推薦使用1.8 ,好像低版本的1.5 、1.6有限制,還有就是現在最新版本1.5.9的Spring Boot還不支持jdk9。
next -》 next
選擇Spring Boot 版本,選擇需要的模塊,我們開始學習就使用默認的Web模塊。
結構
初始化完成后,會生成幾個文件,項目結構:
- pom.xml:Maven構建說明文件。
- *Application:帶有main()方法的類,用於啟動應用程序。
- *ApplicationTests:一個空的Junit測試類,它加載了一個使用Spring Boot字典配置功能的Spring應用程序上下文。
- application.properties:一個空的properties文件,用於配置項目的相關屬性。
- static存放相關靜態文件;
- template 存放模板渲染文件。
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>
<groupId>com.wuwii</groupId>
<artifactId>learn-spring-boot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>learn-spring-boot</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.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-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
使用的是Spring Boot父級依賴
,spring-boot-starter-parent是一個特殊的starter,它用來提供相關的Maven默認依賴,使用它之后,常用的包依賴可以省去version標簽。
起步依賴 spring-boot-starter-xx
Spring Boot提供了很多”開箱即用“的依賴模塊,都是以spring-boot-starter-xx作為命名的。舉個例子來說明一下這個起步依賴的好處,比如組裝台式機和品牌機,自己組裝的話需要自己去選擇不同的零件,最后還要組裝起來,期間有可能會遇到零件不匹配的問題。耗時又消力,而品牌機就好一點,買來就能直接用的,后續想換零件也是可以的。相比較之下,后者帶來的效果更好點(這里就不討論價格問題哈),起步依賴就像這里的品牌機,自動給你封裝好了你想要實現的功能的依賴。就比如我們之前要實現web功能,引入了spring-boot-starter-web這個起步依賴。
起步依賴本質上是一個Maven項目對象模型(Project Object Model,POM),定義了對其他庫的傳遞依賴,這些東西加在一起即支持某項功能。很多起步依賴的命名都暗示了它們提供的某種或者某類功能。
Spring Boot Maven插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
- 把項目打包成一個可執行的超級JAR(uber-JAR),包括把應用程序的所有依賴打入JAR文件內,並為JAR添加一個描述文件,其中的內容能讓你用java -jar來運行應用程序。
- 搜索public static void main()方法來標記為可運行類。
運行
現在添加一個接口,來啟動項目運行:
package com.wuwii.learnspringboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class LearnSpringBootApplication {
@RequestMapping("/")
public String index() {
return "Hello World";
}
public static void main(String[] args) {
SpringApplication.run(LearnSpringBootApplication.class, args);
}
}
啟動方式
- @SpringBootApplication是Sprnig Boot項目的核心注解,主要目的是開啟自動配置。后續講解原理的時候再深入介紹。main方法這是一個標准的Java應用的main的方法,主要作用是作為項目啟動的入口,直接運行它的main() 函數。
- 使用命令 mvn spring-boot:run”在命令行啟動該應用,IDEA中該命令在如下位置:
- 運行“mvn package”進行打包時,會打包成一個可以直接運行的 JAR 文件,使用“java -jar”命令就可以直接運行。
- 運行“mvn package”進行打包時,會打包成一個可以直接運行的 JAR 文件,使用“java -jar”命令就可以直接運行。
總結
- 了解Spring Boot 的基本結構和相關屬性的概念;
- 啟動和運行方式。