- 如果不想生成可執行的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)如下:
- 日期和時間 - 精確到毫秒,且易於排序。
- 日志級別 - ERROR, WARN, INFO, DEBUG 或 TRACE。
- Process ID。
- ---分隔符,用於區分實際日志信息開頭。
- 線程名 - 包括在方括號中(控制台輸出可能會被截斷)。
- 日志名 - 通常是源class的類名(縮寫)。
- 日志信息。
注 Logback沒有FATAL級別,它會映射到ERROR。
- Spring DevTools 特點:
- 默認禁用緩存選項。
- 在類路徑上的文件發生更改時自動重啟。注意:某些資源(如靜態資源和視圖模板)不需要重啟應用程序。
- 實時加載。
- 全局設置。
-
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
解決:
- jdk不匹配(或不存在)
項目指定的jdk為“jdk1.6.0_18”,而當前eclipse使用的是“jdk1.6.0_22”。需要在BuildPath | Libraries,中做簡單調整。 - jar包缺失或沖突
當找不到“XX”所在的jar包時,會報這個錯。解決只需要找到(ctrl+點擊,可能能看到jar包名稱)對應jar包導入項目即可。
另外,出現相同的XX時也會報此錯。可能需要調包、解包、選刪。 - 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類文件中的注解
- @RestController
web應用,需要寫這個注解,這個注解相當於同時添加@Controller和@ResponseBody注解。 - @EnableAutoConfiguration
Spring Boot建議只有一個帶有該注解的類。
@EnableAutoConfiguration作用:Spring Boot會自動根據你jar包的依賴來自動配置項目。
如果你不想讓Spring Boot自動創建,你可以配置注解的exclude屬性,例如:
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}
- @SpringBootApplication
由於大量項目都會在主要的配置類上添加@Configuration,@EnableAutoConfiguration,@ComponentScan三個注解。
因此Spring Boot提供了@SpringBootApplication注解,該注解可以替代上面三個注解(使用Spring注解繼承實現)。 - @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編譯類后才能生效,你可以打開自動編譯功能,這樣在你保存修改的時候,類就自動重新加載了。