快速創建一個springboot web工程
以intellij idea為例:
1、首先創建一個項目,創建時選擇spring initializr,然后next,如下圖:
2、填寫項目信息,如下圖:
3、勾選web
4、最后一步,填寫工程名字點擊finish
第一次創建時系統會去下載需要的依賴,耗時稍長,請耐心等待。
創建成功后,目錄結構如下:項目的根目錄下會有一個artifactid+application命名規則的入口類,springbootlearningapplication
springbootlearningapplication這個類有一個@springbootapplication注解,這是整個spring boot的核心注解,它的目的就是開啟spring boot的自動配置。
@restcontroller注解,使之變為一個controller,然后再在里邊提供一個地址轉換方法,如下:
main方法中,右擊選擇run,項目啟動完成后,就可以在瀏覽器中直接訪問了。
訪問路徑是http://localhost:8080。
tip:
如果是第一次創建會發現,文件上帶有紅圈,文件內容不可更改,如下進行設置:
如何將已有項目改造為spring boot項目
1創建可部署的war文件
生成可部署war文件的第一步是創建一個 springbootservletinitializer的子類并重寫它的configure方法。這樣就可以利用spring servlet 3.0的支持,并允許在servlet容器啟動時配置你的應用程序。通常,main方法所在的類需要繼承
springbootservletinitializer:
1
2
3
4
5
6
7
8
9
10
11
|
@springbootapplication public class application extends springbootservletinitializer { @override protected springapplicationbuilder configure(springapplicationbuilder application) { return application.sources(application. class ); } public static void main(string[] args) throws exception { springapplication.run(application. class , args); } } |
下一步是更新構建配置,以便您的項目生成war文件而不是jar文件。如果你使用maven并使用spring-boot-starter-parent(它為你配置maven的war插件),你所需要做的就是修改pom.xml文件把工程更改為war工程:
1
|
<packaging> war </ packaging> |
如果你使用gradle,你需要修改build.gradle以將war插件用到項目中:
1
|
apply plugin: 'war' |
最后一步是確保內置servlet容器不會干擾要部署war文件的servlet容器。為此,您需要按給定方式聲明內置servlet容器依賴關系。
maven:
1
2
3
4
5
6
7
8
9
|
<dependencies> <!-- … --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-tomcat</artifactid> <scope>provided</scope> </dependency> <!-- … --> </dependencies> |
gradle:
1
2
3
4
5
|
dependencies { // ... providedruntime 'org.springframework.boot :spring-boot-starter-tomcat' // ... } |
[注意]
如果您使用的gradle版本僅支持僅編譯依賴項(2.12或更高版本),則應繼續使用providedruntime。在其他某些限制條件內, 如果compileonly依賴不在測試類的路徑中,這將導致任何基于web的集成測試將失敗。
如果您使用spring boot構建工具,那么將內置servlet容器依賴關系標記為已提供將產生一個可執行文件,并在目錄中打包提供的依賴lib-provided關系。這意味著,除了被部署到一個servlet容器,也可以使用運行應用程序java -jar的命令行上。
看一下spring boot的示例應用程序,用于上述配置的基于maven的示例 。
2為舊的servlet容器創建可部署的war文件
較舊的servlet容器不支持servlet 3.0中使用的servletcontextinitializer引導進程。 但你仍可以在這些容器中使用spring和spring boot,只是需要添加一個web.xml到應用程序中,并配置它通過dispatcherservlet加載一個applicationcontext。
3將現有應用程序轉換為spring boot
對于非web應用程序應該很容易(applicationcontext通過調用替換為springapplication或 springapplicationbuilder)。spring mvc應用程序通常需要先創建可部署的war應用程序,然后將其遷移到可執行的war或jar。jar轉war指南
創建一個繼承自springbootservletinitializer(例如,在一個叫做類application)的可部署war包,并添加spring boot的
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@springbootapplication 注解。例: @springbootapplication public class application extends springbootservletinitializer { @override protected springapplicationbuilder configure(springapplicationbuilder application) { //自定義應用程序或調用application.sources(...)添加源 //因為我們的例子本身是一個@configuration類(通過@springbootapplication) //我們實際上不需要重寫這個方法。 return application; } } |
記住,無論你放在什么sources只是一個spring applicationcontext,通常已經運行東西都繼續在這里運行??赡苡幸恍゜ean你可以以后刪除,讓spring boot為它們提供自己的默認值,但某些工作應優先進行。
靜態資源可以移動到/public(或/static或)/resources或 /meta-inf/resources)在類路徑根目錄中。messages.properties(spring boot在類路徑的根目錄中自動檢測到這一點)也是如此。
vanilla對spring dispatcherservlet和spring security的使用不需要進一步的修改。如果你的應用程序還有其他特性,如使用其他servlet或過濾器,那么你需要添加一些配置到application context。web.xml中替換的標簽如下:
- 一個在容器中的servlet或servletregistrationbean類型的帶有@bean注解的類會被構建安裝,如果它在web.xml中被或中被配置的話。
- 一個filter或filterregistrationbean類型的帶有@bean注解的類,其運行方式就像先前被和配置的類。
- 一個在xml文件中的applicationcontext添加一個@import注解就可以添加進application?;蛘咴谝呀洿罅渴褂米⒔馀渲玫那闆r下在幾行代碼中重新定義@bean注解。
為使war包運行,便需向應用程序中添加一個可執行的main方法,如
1
2
3
|
public static void main(string[] args) { springapplication.run(application. class , args); } |
[注意]
如果打算將應用程序打為war或可執行應用程序,需要共享建設者的自定義中,可以執行springbootservletinitializer回調方法和main方法,就像這樣:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@springbootapplication public class application extends springbootservletinitializer { @override protected springapplicationbuilder configure(springapplicationbuilder builder) { return configureapplication(builder); } public static void main(string[] args) { configureapplication( new springapplicationbuilder()).run(args); } private static springapplicationbuilder configureapplication(springapplicationbuilder builder) { return builder.sources(application. class ).bannermode(banner.mode.off); } } |
應用程序可以分為多個類別:
- 沒有web.xml的servlet 3.0+應用程序。
- 帶有web.xml的應用程序。
- 具有上下文層次結構的應用程序。
- 沒有上下文層次結構的應用程序。
所有這些都應該適合轉譯,但每個可能需要略有不同的技巧。
如果已經使用spring servlet 3.0+初始化程序支持類,servlet 3.0+應用程序就很容易轉譯。通?,F存在 webapplicationinitializer上的所有代碼都可以遷移到springbootservletinitializer。如果現有的應用程序有多個applicationcontext(例如,使用 abstractdispatcherservletinitializer),那么可以將所有的上下文源合并為單個springapplication。其中可能遇到的問題是,如果程序運行失敗,就需要維護上下文層次結構。請參閱 構建一個層次的條目的例子。包含web特定功能的現有父上下文通常需要分解,以便所有servletcontextaware組件都在子上下文中。
非spring應用程序的應用程序會更容易轉換為spring boot應用程序,上述指導可能會有所幫助,但過程可能會有所不同。
4將war部署到weblogic
要將spring boot應用程序部署到weblogic,必須確保您的servlet初始化程序直接實現webapplicationinitializer(即使您從已實現它的基類擴展)。
weblogic的典型初始化方法:
1
2
3
4
5
6
7
8
|
import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.boot.context.web.springbootservletinitializer; import org.springframework.web.webapplicationinitializer; @springbootapplication public class myapplication extends springbootservletinitializer implements webapplicationinitializer { } |
如果使用logback,您還需要告訴weblogic更合適打包的版本,而不是預先安裝的版本。您可以通過添加一個web-inf/weblogic.xml文件來做到這一點 ,內容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?xml version= "1.0" encoding= "utf-8" ?> <wls:weblogic-web-app xmlns:wls= "http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi= "http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http: //java.sun.com/xml/ns/javaee http: //java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http: //xmlns.oracle.com/weblogic/weblogic-web-app http: //xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd"> <wls:container-descriptor> <wls:prefer-application-packages> <wls: package -name>org.slf4j</wls: package -name> </wls:prefer-application-packages> </wls:container-descriptor> </wls:weblogic-web-app> |
5在舊(servlet 2.5)容器中部署war
spring boot使用servlet 3.0 api來初始化servletcontext(寄存器servlets 等),所以你不能在servlet 2.5容器外使用相同的應用程序。但是,可以在舊容器上借助于特殊工具來運行spring boot。如果你添加org.springframework.boot:spring-boot-legacy作為依賴(單獨維護 spring boot的核心,目前在1.0.2.release),你所需要做的是創建web.xml并聲明一個context listener、 application context、filters 、servlets 。這個context listener對于spring boot是一個特殊的用例,但是對于servlet 2.5中的spring應用程序,其余部分是一般用法。例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<?xml version= "1.0" encoding= "utf-8" ?> <web-app version= "2.5" xmlns= "http://java.sun.com/xml/ns/javaee" xmlns:xsi= "http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation= "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" > <context-param> <param-name>contextconfiglocation</param-name> <param-value>demo.application</param-value> </context-param> <listener> <listener- class >org.springframework.boot.legacy.context.web.springbootcontextloaderlistener</listener- class > </listener> <filter> <filter-name>metricsfilter</filter-name> <filter- class >org.springframework.web.filter.delegatingfilterproxy</filter- class > </filter> <filter-mapping> <filter-name>metricsfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>appservlet</servlet-name> <servlet- class >org.springframework.web.servlet.dispatcherservlet</servlet- class > <init-param> <param-name>contextattribute</param-name> <param-value>org.springframework.web.context.webapplicationcontext.root</param-value> </init-param> <load-on-startup> 1 </load-on-startup> </servlet> <servlet-mapping> <servlet-name>appservlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> |
在這個例子中,我們使用的是單個應用程序上下文(由context listener創建的)并將其連接到dispatcherservlet用一個參數初始化。這在spring boot應用程序中是很常見的(一般只有一個application context)。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://blog.csdn.net/rickiyeat/article/details/58156385