spring boot(一)入門

spring boot(一)入門

1、簡介

一、微服務的概念

提及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

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

  1. 習慣優於配置的原則,默認的配置已經知足咱們平常開發的大部分要求。
  2. 快速搭建組合各個模塊功能的提供,無需配置的整合第三方框架。
  3. 零XML配置,只須要自動配置和Java Config。
  4. 內嵌Servlet容器,下降環境的要求,更快更多方式的啓動項目的方式。
  5. 更便捷的應用狀態監控。
  6. 與雲計算spring cloud組成J2EE一站式解決方案。

三、快速入門

3.1 環境及工具

  • jdk1.8:Spring Boot 推薦jdk1.7及以上;咱們使用java version "1.8.0_152"。
  • 目前最新的springboot,spring boot 2.1.0 BUILD-SNAPSHAT 要求Java 8 or 9Spring Framework 5.1.0.BUILD-SNAPSHOT 以上。
  • IntelliJIDEA2018:我使用的是 IntelliJ IDEA 2018.1.3 x6四、STS。
  • SpringBoot : 使用1.5.10.RELEASE。

3.2 Maven設置

給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>

3.3 IDEA設置

3.4 Hello World

建立一個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.xmlspring-boot-starter-web在該parent部分的正下方添加 依賴項:

<dependencies> 
    <dependency> 
        <groupId> org.springframework.boot </ groupId> 
        <artifactId> spring-boot-starter-web </ artifactId> 
    </ dependency> 
</ dependencies>

再次查看依賴圖:以下

3.5 編寫主程序啓動應用

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);
    }
}
  1. @RestController@requestmapping註解是Spring MVC註解。(它們不是特定於Spring引導的。)有關更多細節, 請參閱Spring參考文檔中的MVC部分。
  2. 第二個註解@EnableAutoConfiguration,這個註解告訴springboot,讓它猜想你想基於你添加的jar依賴去如何配置spring,因爲Spring boot-starer-web添加了Tomcat和Spring MVC,因此自動配置會假設您正在開發一個web應用程序並幫您相應地設置Spring。
  3. 應用程序的最後一部分是main方法。這只是一個標準的方法,它遵循Java約定的應用程序入口點。咱們的main方法經過調用run來委託Spring Boot的SpringApplication類。SpringApplication引導咱們的應用程序,啓動Spring,而後啓動自動配置的Tomcat web服務器。咱們須要Application類做爲運行方法的一個參數,用來告訴SpringApplication,它是主要的Spring組件。args數組命令行參數也做爲參數傳遞給SpringApplication。

3.6 編寫controller響應瀏覽器請求

/**
      * home方法 向瀏覽器響應 Hello World
      */
    @RequestMapping("/hello")
    public String home(){
        return "Hello World";
    }

3.7 運行main方法,啓動程序

瀏覽器訪問localhost:8080/hello

能夠看到,咱們第一個spring boot項目已經啓動了。另外咱們看到,這裏Applicationjava被配置爲自動配置的控制器,並且對於@EnableAutoConfiguration註解咱們使用不熟悉,很容易忘記在控制層添加註解,其實spring boot 是可使用一個主程序啓動spring bot項目,而後咱們按照咱們傳統的controller,service,dao三層編寫咱們的程序,咱們改進一下項目以下:

  1. 首先springboot的主程序入口:

    //@SpringBootApplication 來標註一個主程序類,
    //說明這是一個Spring Boot應用
    @SpringBootApplication 
    public class Application {
      public static void main(String[] args) {
          SpringApplication.run(Application.class, args);
      }
    }
    1. 咱們定義兩個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應用";
          }
      }
      1. 啓動訪問:

    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 負責頁面訪問控制。

4.springboot的快捷部署

首先,咱們要在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一站式解決方案。

相關文章
相關標籤/搜索