1. 程式人生 > >spring boot 原理、demo 與打包執行

spring boot 原理、demo 與打包執行

Spring  Boot的背景,我們為什麼要用它,它能給我們帶來什麼遍便利?

        回首我們以前使用Spring框架的時候,我們需要首先在(如果你使用Maven的話)pom檔案中增加對相關的的依賴(使用gradle來構建的話基本也一樣)然後新建Spring相關的xml檔案,而且往往那些xml檔案還不會少。然後繼續使用tomcat或者jetty作為容器來執行這個工程。基本上每次建立一個新的專案都是這麼一個流程,而我們有時候僅僅想快速的建立一個Spring web工程來測試一些東西,或者是希望能節省時間。

       現在我們使用Spring Boot就可以快速的做到這些了。spring boot可以直接把應用打包成為一個jar/war,然後這個jar/war是可以直接啟動的,不需要另外配置一個Web Server。

Spring boot 的理念:

      從最根本上來講,Spring Boot就是一些庫的集合,它能夠被任意專案的構建系統所使用。簡便起見,該框架也提供了命令列介面,它可以用來執行和測試Boot應用。框架的釋出版本,包括整合的CLI(命令列介面),可以在Spring倉庫中手動下載和安裝

       實際中springboot將應用打包之後,會生成一個fat jar,裡面包含了應用依賴的jar包,還有Spring boot loader相關的類

       Fat jar的啟動Main函式是JarLauncher,它負責建立一個LaunchedURLClassLoader來載入/lib下面的jar,並以一個新執行緒啟動應用的Main函式。LaunchedURLClassLoader和普通的URLClassLoader的不同之處是,它提供了從Archive里加載.class的能力。結合Archive提供的getEntries函式,就可以獲取到Archive裡的Resource。當然裡面的細節還是很多的。(詳細檢視原始碼)

Spring boot 實現?

         Spring Boot 推薦採用基於 Java 註解的配置方式,而不是傳統的 XML。只需要在主配置 Java 類上新增“@EnableAutoConfiguration”註解就可以啟用自動配置。Spring Boot 的自動配置功能是沒有侵入性的,只是作為一種基本的預設實現。開發人員可以通過定義其他 bean 來替代自動配置所提供的功能。比如當應用中定義了自己的資料來源 bean 時,自動配置所提供的 HSQLDB 就不會生效。這給予了開發人員很大的靈活性。既可以快速的建立一個可以立即執行的原型應用,又可以不斷的修改和調整以適應應用開發在不同階段的需要。可能在應用最開始的時候,嵌入式的記憶體資料庫(如 HSQLDB)就足夠了,在後期則需要換成 MySQL 等資料庫。Spring Boot 使得這樣的切換變得很簡單。

       @EnableAutoConfiguration”註解的作用在於讓 Spring Boot 根據應用所宣告的依賴來對 Spring 框架進行自動配置,這就減少了開發人員的工作量。@EnableAutoConfiguration註解會告知Boot要採用一種特定的方式來對應用進行配置。這種方法會將其他樣板式的配置均假設為框架預設的約定,因此能夠聚焦於如何儘快地使應用準備就緒以便執行起來。

       Spring Boot 的這個配置優先順序看似複雜,其實是快速地修改配置引數值,而不需要重新打包和部署應用。

Spring boot的配置和使用:

1. 首先需要新建一個普通的maven 工程;

2. 要在pom.xml檔案中新增依賴如下

  <projectxmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>

    <artifactId>spingboot-demo</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <parent>

       <groupId>org.springframework.boot</groupId>

       <artifactId>spring-boot-starter-parent</artifactId>

       <version>1.0.0.RC1</version>

    </parent>

    <!-- Add typicaldependencies for a web application -->

    <dependencies>

       <dependency>

           <groupId>org.springframework.boot</groupId>

           <artifactId>spring-boot-starter-web</artifactId>

           <version>1.0.2.RELEASE</version>

       </dependency>

       <dependency>

           <groupId>org.springframework.boot</groupId>

           <artifactId>spring-boot-starter-actuator</artifactId>

       </dependency>

    </dependencies>

    <repositories>

       <repository>

           <id>spring-snapshots</id>

           <url>http://repo.spring.io/libs-snapshot</url>

       </repository>

    </repositories>

    <pluginRepositories>

       <pluginRepository>

           <id>spring-snapshots</id>

           <url>http://repo.spring.io/libs-snapshot</url>

       </pluginRepository>

    </pluginRepositories>

    <build>

       <plugins>

           <plugin>

              <groupId>org.springframework.boot</groupId>

              <artifactId>spring-boot-maven-plugin</artifactId>

           </plugin>

       </plugins>

    </build>

</project>

4.執行  

第一種方式

     通過在UserController中加上@EnableAutoConfiguration開啟自動配置,然後通過SpringApplication.run(UserController.class);執行這個控制器;這種方式只執行一個控制器比較方便;

程式碼如下:

@RestController

@EnableAutoConfiguration

public class Application {

@RequestMapping("user")

public static StringSayHello() {

        return"Hello Word!";

}

public static voidmain(String[] args){

        SpringApplication.run(Application.class,args);

}

}

第二種方式

通過@[email protected]開啟註解掃描並自動註冊相應的註解Bean

程式碼如下:

@Configuration

@ComponentScan

@EnableAutoConfiguration

public class Application {

public static voidmain(String[] args){

        SpringApplication.run(Application.class,args);

}

將工程打包成獨立執行jar

       進入cmd 定位到專案目錄下然後執行 mvn clean  package –DskipTests

然後會在專案的target資料夾下出現jar例如(spingboot-demo-0.0.1-SNAPSHOT.jar

然後再cmd 的C盤 使用者目錄下執行命令$ java –jar jar包的目錄)E:\program\spingboot-demo\target\spingboot-demo-0.0.1-SNAPSHOT.jar

回車執行會有如下圖


出現下圖表示執行成功


然後在瀏覽器中輸入埠號和地址進行訪問。


這就立馬能夠明白spring boot 的優勢了,直接一個jar 包和java 環境就能執行web 專案了

遇到的問題:端口占用問題

       執行獨立jar包時可能會出現端口占用問題,springboot的內嵌tomcat的埠是8080這個埠可能會被oracle (我就是)佔用或者 tomcat(預設8080)佔用所以我們要重新配置內嵌tomcat的埠號步驟如下

1.   resource目錄下新建application.properties檔案(檔名一定要application.properties因為這個是預設的配置,如果檔名字不是這個則需要手動的新增識別)配置如下圖