01.Spring Boot 實戰~認識Spring Boot

01.Spring Boot 實戰~認識Spring Boot

SpringBoot

        Spring Boot 是一個框架,一種全新的編程規範,他的產生簡化了框架的使用,所謂簡化是指簡化了 Spring 衆多框架中所需的大量且繁瑣的配置文件,所以 SpringBoot 是一個服務於框架的框架,服務範圍是簡化配置文件。所以從本質上來說,SpringBoot 其實就是 Spring 框架的另一種表現形式。

        使用 SpringBoot 可以創建獨立的 Spring 應用程序

        在Spring Boot中直接嵌入了Tomcat、 Jetty、 Undertow等Web容器, 所以在使用SpringBoot 做 Web 開發時不需要部署 WAR 文件。通過提供自己的啓動器(Starter)依賴,簡化項目構建配置 ,儘量的自動配置 Spring 和第三方庫,提供了生產就緒特徵,如:度量指標,運行狀況檢查和外部化配置,絕對沒有代碼生成,也不需要 XML 配置文件

        SpringBoot本質是Spring Framework,Spring Framework主要作用就是整合其他技術。所以學習Spring Boot就是在學習如何整合其他技術。

Spring Boot 版本

        SNAPSHOT : 開發版。

        CURRENT:最新版,不一定穩定。

        GA:GeneralAvailability,正式發佈的版本。

通過IDEA Maven創建SpringBoot項目

關於Maven的使用可以點擊這裏

導入依賴

<?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.alvin</groupId>
  <artifactId>Spring Boot Study</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>Spring Boot Study Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <!--  SpringBoot 的父級依賴,只有繼承它項目纔是 Spring Boot 項目
        spring-boot-starter-parent 是一個特殊的 starter,
        它用來提供相關的 Maven 默認依賴。
        使用它之後,常用的包依賴可以省去 version 標籤。
      -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.0.RELEASE</version>
  </parent>

  <!--
      啓動器依賴
  -->
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>


  <!--
      spring-boot-maven-plugin 插件是將 springboot 的應用程序打包成 jar 包的插件。
      將所有 應用啓動運行所需要的 jar 包都包含進來,從邏輯上將具備了獨立運行的條件。
      當運行"mvn package"進行打包後,使用"java-jar"命令就可以直接運行。
   -->
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>

  </build>

</project>

啓動類

        啓動類在啓動時會做註解掃描(@Controller、@Service、@Repository......),掃描 位置爲同包或者子包下的註解,所以啓動類的位置應放於包的根下。

啓動類與啓動器的區別:

        啓動類表示項目的啓動入口

        啓動器表示 jar 包的座標

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//啓動類必須要有這個註解!
@SpringBootApplication
public class SpringBootDemoApplication {
    public static void main(String[] args) {
        //必須要通過SpringApplication下的靜態方法run
        //第一個參數是啓動類的class,第二個參數是main方法裏的args
        SpringApplication.run(SpringBootDemoApplication.class,args);
    }
}

在這裏插入圖片描述

       SpringBoot 將所有的功能場景都抽取出來,做成一個個的 starter(啓動器),只需要在項 目裏面引入這些 starter 相關場景的所有依賴都會導入進來,要用什麼功能就導入什麼場景, 在 jar 包管理上非常方便,最終實現一站式開發。

SpringBoot 提供了多達 44 個啓動器

spring-boot-starter SpringBoot 的核心啓動器,包含了自動配置、日誌和 YAML
spring-boot-starter-actuator 幫助監控和管理應用
spring-boot-starter-web 支持全棧式 Web 開發,包括 Tomcat 和 spring-webmvc
spring-boot-starter-amqp 通過 spring-rabbit 來支持 AMQP 協議(AdvancedMessage QueuingProtocol)
spring-boot-starter-aop 支持面向方面的編程即 AOP,包括 spring-aop 和 AspectJ
spring-boot-starter-artemis 通過 ApacheArtemis 支持 JMS 的 API(JavaMessage ServiceAPI)
spring-boot-starter-batch 支持 SpringBatch,包括 HSQLDB 數據庫
spring-boot-starter-cache 支持 Spring 的 Cache 抽象
spring-boot-starter-cloud-connectors 支持 Spring Cloud Connectors,簡化了在像 CloudFoundry 或 Heroku 這樣的雲平臺上連 接服務。
spring-boot-starter-data-gemfire 支持 GemFire 分佈式數據存儲,包括 spring-data-gemfire
spring-boot-starter-data-jpa 支持 JPA(Java PersistenceAPI),包括 spring-data-jpa、spring-orm、Hibernate
spring-boot-starter-data-rest 通過 spring-data-rest-webmvc,支持通過 REST 暴露 Spring Data 數據倉庫
spring-boot-starter-data-solr 支持 ApacheSolr 搜索平臺,包括 spring-data-solr
spring-boot-starter-freemarker 支持 FreeMarker 模板引擎
spring-boot-starter-groovy-templates 支持 Groovy 模板引擎
spring-boot-starter-hateoas 通過 spring-hateoas 支持基於 HATEOAS 的 RESTfulWeb 服務
spring-boot-starter-hornetq 通過 HornetQ 支持 JMS
spring-boot-starter-integration 支持通用的 spring-integration 模塊
spring-boot-starter-jdbc 支持JDBC數據庫
spring-boot-starter-jersey 支持 JerseyRESTfulWeb 服務框架
spring-boot-starter-jta-atomikos 通過 Atomikos 支持 JTA 分佈式事務處理
spring-boot-starter-jta-bitronix 通過 Bitronix 支持 JTA分佈式事務處理
spring-boot-starter-mail 支持 javax.mail 模塊
spring-boot-starter-mobile 支持 spring-mobile
spring-boot-starter-mustache 支持 Mustache 模板引擎
spring-boot-starter-redis 支持 Redis 鍵值存儲數據庫,包括 spring-redis
spring-boot-starter-security 支持 spring-security
spring-boot-starter-social-facebook 支持 spring-social-facebook
spring-boot-starter-social-linkedin 支持 pring-social-linkedin
spring-boot-starter-social-twitter 支持 pring-social-twitter
spring-boot-starter-test 支持常規的測試依賴,包括 JUnit、Hamcrest、Mockito 以及 spring-test 模塊
spring-boot-starter-thymeleaf 支持 Thymeleaf 模板引擎,包括與 Spring 的集成
spring-boot-starter-velocity 支持 Velocity 模板引擎
spring-boot-starter-websocket 支持 WebSocket 開發
spring-boot-starter-ws 支持 SpringWebServices
spring-boot-starter-actuator 增加了面向產品上線相關的功能,比如測量和監控
spring-boot-starter-remote-shell 增加了遠程 sshshell 的支持
spring-boot-starter-jetty 引入了 JettyHTTP 引擎(用於替換 Tomcat)
spring-boot-starter-log4j 支持 Log4J 日誌框架
spring-boot-starter-logging 引入了 Spring Boot 默認的日誌框架 Logback
spring-boot-starter-tomcat 引入了 Spring Boot 默認的 HTTP 引擎 Tomcat
spring-boot-starter-undertow 引入了 UndertowHTTP 引擎(用於替換 Tomcat)

文件的配置

       SpringBoot 提供一個名稱爲 application 的全局配置文件,支持兩種格式 properteis 格式 與 YAML 格式。

在這裏插入圖片描述

       配置 Tomcat 監聽端口

在這裏插入圖片描述

       基本格式要求,大小寫敏感,使用縮進代表層級關係,並且相同的部分只出現一次。

server: 
	port: 7777

不同格式的加載順序

        如 果 同 一 個 目 錄 下 , 有 application.yml 也 有 application.properties, 默 認 先 讀 取 application.properties。

        如果同一個配置屬性,在多個配置文件都配置了,默認使用第 1 個讀取到的,後面讀取 的不覆蓋前面讀取到的。

不同位置的加載順序

當前項目根目錄下的一個/config 子目錄中(最高)

config/application.properties

config/application.yml

當前項目根目錄中(第二)

application.properties

application.yml

項目的 resources 即 classpath 根路徑下的/config 目錄中(第三)

resources/config/application.properties

resources/config/application.yml

項目的 resources 即 classpath 根路徑中(最後)

resources/application.properties

resources/application.yml


第一個基於Spring Boot的Spring MVC項目

關於SpringMVC可以點擊這裏

在這裏插入圖片描述

導入依賴

<?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.alvin</groupId>
  <artifactId>Spring Boot Study</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>Spring Boot Study Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.0.RELEASE</version>
  </parent>

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

編寫啓動類(SpringBootDemoApplication)

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//啓動類必須要有這個註解!
@SpringBootApplication
public class SpringBootDemoApplication {
    public static void main(String[] args) {
        //必須要通過SpringApplication下的靜態方法run
        //第一個參數是啓動類的class,第二個參數是main方法裏的args
        SpringApplication.run(SpringBootDemoApplication.class,args);
    }
}

配置端口(application.properties)

server.port=7777

Spring MVC

@Controller
public class MyController {
    @RequestMapping("/helloworld")
    @ResponseBody
    public String show(){
        return "hello";
    }
}

       這個時候我們運行啓動器就可以了,不需要運行tomcat,也不需要配置SpringMVC等文件,直接在瀏覽器輸入地址就可以了!

在這裏插入圖片描述

SpringBoot 的核心註解

註解 說明
@SpringBootApplication 是 SpringBoot 的啓動類。
此註解等同於@Configuration+@EnableAutoConfiguration+@ComponentScan 的組合。
@SpringBootConfiguration @SpringBootConfiguration 註解是@Configuration 註解的派生註解,跟@Configuration 註解的功能一致,標註這個類是一個配置類,只不過@SpringBootConfiguration 是 springboot 的註解,而@Configuration 是 spring 的註解
@Configuration 通過對 bean 對象的操作替代 spring 中 xml 文件
@EnableAutoConfiguration Spring Boot 自動配置(auto-configuration):嘗試根據你添加的 jar 依賴自動配置你的 Spring 應用。是@AutoConfigurationPackage 和@Import(AutoConfigurationImportSelector.class) 註解的組合
@AutoConfigurationPackage @AutoConfigurationPackage 註解,自動注入主類下所在包下所有的加了註解的類 (@Controller,@Service 等),以及配置類(@Configuration)
@Import({AutoConfigurationImportSelector.class}) 直接導入普通的類
導入實現了 ImportSelector 接口的類
導入實現了 ImportBeanDefinitionRegistrar 接口的類
@ComponentScan 組件掃描,可自動發現和裝配一些 Bean
@ConfigurationPropertiesScan @ConfigurationPropertiesScan 掃描配置屬性。@EnableConfigurationProperties 註解的作 用是使用 @ConfigurationProperties 註解的類生效
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章