spring boot 知識點


  • 如果不想生成可執行的jar文件,想生成war包並自己直接放在tomcat容器跑,那就這樣操作:
    1.修改pom.xml,將packaging由jar改成war,並添加tomcat的依賴,scope值為provided表明:如果打包時,需要內嵌tomcat,就自動提供。

    2.打開DemoApplication.java ,讓他直接繼承SpringBootServletInitializer,並重寫configure方法,該方法的作用提供類似web.xml的配置服務。
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DemoApplication extends SpringBootServletInitializer{

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(DemoApplication.class);
    }

    @RequestMapping(value = {"/",""})
    public String helloboot(){
        return "hello boot !!" ;
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

3.DemoApplication.java 直接右鍵,Run As - >Maven build..輸入package的命令,就直接打成war包了

  • 為了構建一個既可執行,又能部署到外部容器的war文件,你需要標記內嵌容器依賴為"provided"。

  • 構建的jar或war里,你想啟動的main類既可以通過一個配置選項指定,也可以通過向manifest添加一個Main-Class屬性。如果你沒有指定main類,該插件會搜索帶有public static void main(String[] args)方法的類。

  • Spring Boot默認的日志輸出節點(items)如下:

  1. 日期和時間 - 精確到毫秒,且易於排序。
  2. 日志級別 - ERROR, WARN, INFO, DEBUG 或 TRACE。
  3. Process ID。
  4. ---分隔符,用於區分實際日志信息開頭。
  5. 線程名 - 包括在方括號中(控制台輸出可能會被截斷)。
  6. 日志名 - 通常是源class的類名(縮寫)。
  7. 日志信息。
    注 Logback沒有FATAL級別,它會映射到ERROR。
  • Spring DevTools 特點:
  1. 默認禁用緩存選項。
  2. 在類路徑上的文件發生更改時自動重啟。注意:某些資源(如靜態資源和視圖模板)不需要重啟應用程序。
  3. 實時加載。
  4. 全局設置。
  • Spring DevTools 相關知識:
    運行打包的應用程序時,開發人員工具會自動禁用。如果你通過 Java -jar或者其他特殊的類加載器進行啟動時,都會被認為是“生產環境的應用”。
    將依賴標記為optional可選是一種最佳做法,可以防止將devtools依賴傳遞到其他模塊中。Gradle 不支持開箱即用的optional依賴項。

  • Spring官方已經不推薦使用JSP來開發WEB,而是推薦使用如下幾種模板引擎來開發:
    Thymeleaf(Spring官方推薦)
    FreeMarker
    Velocity
    Groovy
    Mustache
    Spring Boot默認存放模板的路徑在 src/main/resources/templates,不過我們也可以自行配置路徑。

  • 處理靜態文件
    默認情況下我們只需要在 src/main/resources/static 目錄下添加 css/style.css 和 js/main.js 文件,Spring MVC能夠自動將他們發布,瀏覽器通過訪問/css/style.css, /js/main.js就可以正確加載這些資源。

  • 打包成了jar包,不需要容器就可以在生成環境下通過運行jar包啟動一個Web服務。
    這樣的服務怎么樣正確的停止呢?或許你只是簡單的kill -9對應的進程,但實際上,有更優雅的方式。
    Spring Boot里面有一個spring-boot-starter-actuator的項目,可以監控和管理Spring Boot應用。其中暴露了很多endpoint,可以方便的檢測應用的健康情況。其中有一個shutdown的endpoint可以優雅地停止應用。
    參考鏈接:http://jaskey.github.io/blog/2016/04/05/shutdown-spring-boot-application-gracefully/

  • 報錯:XX cannot be resolved to a type
    解決:

  1. jdk不匹配(或不存在)
    項目指定的jdk為“jdk1.6.0_18”,而當前eclipse使用的是“jdk1.6.0_22”。需要在BuildPath | Libraries,中做簡單調整。
  2. jar包缺失或沖突
    當找不到“XX”所在的jar包時,會報這個錯。解決只需要找到(ctrl+點擊,可能能看到jar包名稱)對應jar包導入項目即可。
    另外,出現相同的XX時也會報此錯。可能需要調包、解包、選刪。
  3. eclipse查找項目類型策略所致
    eclipse下,上述兩條都對比過了,沒有任何問題,可偏偏還報這錯。這時,需要操作一下 Project | Clean... ,問題即可解決。原因是,機制所致。因為某些特殊原因,eclipse沒能自動編譯源代碼到build/classes(或其他classes目錄),導致類型查找不到。
  • 運行Spring Boot項目的方式:
    方式1:在IDE中直接執行 main 函數,然后訪問http://localhost:8080。
    方式2:用 mvn 打包為可執行jar包,然后執行java -jar xxx.jar。
    方式3:執行 mvn spring-boot:run 運行項目(直接使用tomcat(默認)啟動項目)。

  • 運行 main函數 方式來啟動Spring Boot項目,下面3種寫法中選擇一種
    寫法1,最簡單的寫法:

SpringApplication.run(Application.class, args);

該方法返回一個ApplicationContext對象,使用注解的時候返回的具體類型是AnnotationConfigApplicationContext或AnnotationConfigEmbeddedWebApplicationContext,當支持web的時候是第二個。
寫法2:

SpringApplication application = new SpringApplication(Application.class);
application.run(args);

SpringApplication包含了一些其他可以配置的方法,如果你想做一些配置,可以用這種方式。
寫法3:使用SpringApplicationBuilder

new SpringApplicationBuilder()
        .showBanner(false)
        .sources(Application.class)
        .run(args);

當使用SpringMVC的時候由於需要使用子容器,就需要用到SpringApplicationBuilder,該類有一個child(xxx...)方法可以添加子容器。

  • java類文件中的注解
  1. @RestController
    web應用,需要寫這個注解,這個注解相當於同時添加@Controller和@ResponseBody注解。
  2. @EnableAutoConfiguration
    Spring Boot建議只有一個帶有該注解的類。
    @EnableAutoConfiguration作用:Spring Boot會自動根據你jar包的依賴來自動配置項目。
    如果你不想讓Spring Boot自動創建,你可以配置注解的exclude屬性,例如:
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}
  1. @SpringBootApplication
    由於大量項目都會在主要的配置類上添加@Configuration,@EnableAutoConfiguration,@ComponentScan三個注解。
    因此Spring Boot提供了@SpringBootApplication注解,該注解可以替代上面三個注解(使用Spring注解繼承實現)。
  2. @RequestMapping("xxx")
    這個注解起到路由的作用。
  • 增加父pom比較簡單,而且spring-boot-starter-parent包含了大量配置好的依賴管理,在自己項目添加這些依賴的時候不需要寫 版本號。
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.0.RELEASE</version>
    </parent>

使用父pom雖然簡單,但是有些情況我們已經有父pom,不能直接增加 時,可以通過如下方式:

<dependencyManagement>
     <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.2.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  • Spring通過添加spring-boot-starter-*這樣的依賴就能支持具體的某個功能。
    更完整的功能列表可以查看:using-boot-starter-poms

  • Spring-Loaded項目提供了強大的熱部署功能,添加/刪除/修改 方法/字段/接口/枚舉 等代碼的時候都可以熱部署,速度很快,很方便。
    想在Spring Boot中使用該功能非常簡單,就是在spring-boot-maven-plugin插件下面添加依賴:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>springloaded</artifactId>
                        <version>1.2.5.RELEASE</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

添加以后,通過mvn spring-boot:run啟動就支持熱部署了。
注意:使用熱部署的時候,需要IDE編譯類后才能生效,你可以打開自動編譯功能,這樣在你保存修改的時候,類就自動重新加載了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM