您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關將已有項目改造為Spring Boot項目的示例,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
快速創建一個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:
@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工程:
<packaging> war </ packaging>
如果你使用Gradle,你需要修改build.gradle以將war插件用到項目中:
apply plugin:'war'
最后一步是確保內置servlet容器不會干擾要部署war文件的servlet容器。為此,您需要按給定方式聲明內置servlet容器依賴關系。
Maven:
<dependencies> <!-- … --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <!-- … --> </dependencies>
Gradle:
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的
@SpringBootApplication注解。例: @SpringBootApplication public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { //自定義應用程序或調用application.sources(...)添加源 //因為我們的例子本身是一個@Configuration類(通過@SpringBootApplication) //我們實際上不需要重寫這個方法。 return application; } }
記住,無論你放在什么sources只是一個Spring ApplicationContext,通常已經運行東西都繼續在這里運行。可能有一些bean你可以以后刪除,讓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。或者在已經大量使用注解配置的情況下在幾行代碼中重新定義@Bean注解。
為使war包運行,便需向應用程序中添加一個可執行的main方法,如
public static void main(String[] args) { SpringApplication.run(Application.class, args); }
[注意]
如果打算將應用程序打為war或可執行應用程序,需要共享建設者的自定義中,可以執行SpringBootServletInitializer回調方法和main方法,就像這樣:
@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+應用程序就很容易轉譯。通常現存在 WebApplicationInitializer上的所有代碼都可以遷移到SpringBootServletInitializer。如果現有的應用程序有多個ApplicationContext(例如,使用 AbstractDispatcherServletInitializer),那么可以將所有的上下文源合并為單個SpringApplication。其中可能遇到的問題是,如果程序運行失敗,就需要維護上下文層次結構。請參閱 構建一個層次的條目的例子。包含Web特定功能的現有父上下文通常需要分解,以便所有ServletContextAware組件都在子上下文中。
非Spring應用程序的應用程序會更容易轉換為Spring Boot應用程序,上述指導可能會有所幫助,但過程可能會有所不同。
4將WAR部署到WebLogic
要將Spring Boot應用程序部署到WebLogic,必須確保您的servlet初始化程序直接實現WebApplicationInitializer(即使您從已實現它的基類擴展)。
WebLogic的典型初始化方法:
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文件來做到這一點 ,內容如下:
<?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應用程序,其余部分是一般用法。例:
<?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)。
關于“將已有項目改造為Spring Boot項目的示例”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。