提及spring boot,咱們不得不說一下「微服務」一詞的興起,微服務一詞最先起源於2014年,martin fowler發表的一篇文章Microservices,martin fowler在文中這樣描述了微服務的概念。java
In short, the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API.web
簡而言之,微服務就是一種架構風格,即服務微化,一個服務應該是一組小型服務;服務之間經過HTTP的方式進行互通,相較於傳統的ALL IN ONE單體架構方式,微服務將每個功能元素最終都是一個可獨立替換和獨立升級的軟件單元。spring
Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員再也不須要定義樣板化的配置。經過這種方式,Spring Boot致力於在蓬勃發展的快速應用開發領域(rapid application development)成爲領導者 ——百度百科shell
衆所周知,最流行的、最受Java開發者喜愛的框架當屬Spring,Spring也成爲了在Java EE開發中真正意義上的標準,可是隨着新技術的發展隨着新技術的發展,在這個腳本語言大行其道的時代(Node JS,Ruby,Groovy,Scala等),Java EE使用Spring逐漸變得笨重起來,大量的XML文件存在於項目中,繁瑣的整合配置,複雜的監控,低下的開發效率和部署效率等等問題。spring boot的出現解決了上述的問題,讓咱們更加高效快速的使用spring框架。api
給maven 的settings.xml配置文件的profiles標籤添加指定jdk版本數組
<profile> <id>jdk‐1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile>
建立一個maven工程(jar工程)瀏覽器
pom.xml中導入spring boot的依賴,根據官方文檔的快速開始,引入一下依賴:springboot
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.10.RELEASE</version> </parent> <!-- Additional lines to be added here... --> <!-- (you don't need this if you are using a .RELEASE version) --> <repositories> <repository> <id>spring-snapshots</id> <url>https://repo.spring.io/snapshot</url> <snapshots><enabled>true</enabled></snapshots> </repository> <repository> <id>spring-milestones</id> <url>https://repo.spring.io/milestone</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <url>https://repo.spring.io/snapshot</url> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <url>https://repo.spring.io/milestone</url> </pluginRepository> </pluginRepositories>
Spring Boot提供了許多「Starters」,能夠將jar添加到類路徑中,spring-boot-starter-parent
是一個特殊的啓動器,提供有用的Maven默認值,其餘「Starters」提供了在開發特定類型的應用程序時可能須要的依賴項。因爲咱們正在開發Web應用程序,所以咱們添加了 spring-boot-starter-web
依賴項。在此以前,咱們能夠經過運行如下命令來查看當前的內容服務器
$ mvn dependency:tree [INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
也能夠在idea中 使用ctrl+alt+shift+u 查看依賴圖以下:
能夠看到它spring-boot-starter-parent
自己不提供依賴關係。要添加必要的依賴項,請編輯pom.xml
並spring-boot-starter-web
在該parent
部分的正下方添加 依賴項:
<dependencies> <dependency> <groupId> org.springframework.boot </ groupId> <artifactId> spring-boot-starter-web </ artifactId> </ dependency> </ dependencies>
再次查看依賴圖:以下
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @program: springboot-01-HelloWorrld * * @description: springboot主程序類 * * @author: cxw * * @create: 2018-09-07 14:34 **/ //springmvc的註解,提供web服務,接收瀏覽器請求並,向瀏覽器響應等同 @controller和@responseBody註解 @RestController @EnableAutoConfiguration public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
@RestController
和@requestmapping
註解是Spring MVC註解。(它們不是特定於Spring引導的。)有關更多細節, 請參閱Spring參考文檔中的MVC部分。@EnableAutoConfiguration
,這個註解告訴springboot,讓它猜想你想基於你添加的jar依賴去如何配置spring,因爲Spring boot-starer-web添加了Tomcat和Spring MVC,因此自動配置會假設您正在開發一個web應用程序並幫您相應地設置Spring。/** * home方法 向瀏覽器響應 Hello World */ @RequestMapping("/hello") public String home(){ return "Hello World"; }
瀏覽器訪問localhost:8080/hello
能夠看到,咱們第一個spring boot項目已經啓動了。另外咱們看到,這裏Applicationjava被配置爲自動配置的控制器,並且對於@EnableAutoConfiguration
註解咱們使用不熟悉,很容易忘記在控制層添加註解,其實spring boot 是可使用一個主程序啓動spring bot項目,而後咱們按照咱們傳統的controller,service,dao三層編寫咱們的程序,咱們改進一下項目以下:
首先springboot的主程序入口:
//@SpringBootApplication 來標註一個主程序類, //說明這是一個Spring Boot應用 @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
咱們定義兩個Controller控制層HelloController和HomeController,按照springmvc的方式,接收請求,返回響應。
package cn.news.chen.controller;/** * Project springboot-01-HelloWorrld * User cxw * Date 2018/9/7 * Time 16:08 * Description: */ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; /** * @program: springboot-01-HelloWorrld * * @description: springboot控制層 * * @author: cxw * * @create: 2018-09-07 16:08 **/ @Controller @RequestMapping("/a") public class HomeController { @RequestMapping("/b") @ResponseBody public String hello(){ return "這是個人第一個spring boot應用"; } }
HelloController.java
package cn.news.chen.controller;/** * Project springboot-01-HelloWorrld * User cxw * Date 2018/9/7 * Time 16:39 * Description: */ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; /** * @program: springboot-01-HelloWorrld * * @description: 控制層HelloController * * @author: cxw * * @create: 2018-09-07 16:39 **/ //@RestController和這個註解都是類級別的,使用@RestController說明該類下的全部方法都是向瀏覽器 //響應 @Controller public class HelloController { /** * home方法 向瀏覽器響應 Hello World */ @RequestMapping("/hello") @ResponseBody public String home(){ return "Hello World"; } }
啓動訪問:
注意:若是按照`@SpringBootApplication`主程序的方式使用springboot,類Application.java 要在須要控制的springboot 組件的頂級包或者同一級的包下,才能使用主程序類啓動spring boot程序,springboot建議的目錄結構以下: com +- myproject +- demo +- Application.java | +- domain | +- User.java | +- UserRepository.java | +- service | +- UserService.java | +- controller | +- UserController.java | 一、Application.java 建議放到根目錄下面,主要用於作一些框架配置。 二、domain目錄主要用於實體(Entity)與數據訪問層(Repository)。 三、service 層主要是業務邏輯層。 四、controller 負責頁面訪問控制。
首先,咱們要在pom.xml文件中添加spring boot的打包(jar)插件,官網文檔中,給咱們指出了使用的依賴,如圖:
pom.xml添加以下內容:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
而後,咱們使用maven將咱們的spring boot項目打包
能夠看到在咱們項目的target目錄下,已經打包成功了。咱們使用jar包啓動的方式,啓動一下咱們的springboot項目。
使用java -jar 的方式依然能夠啓動咱們的springboot項目,而且能夠正常訪問,由此能夠看到咱們的springboot 使用嵌入式的Servlet容器,應用無需打成WAR包, starters自動依賴與版本控制,大量的自動配置,簡化開發,真正作到了 J2EE一站式解決方案。