欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解如何將已有項目改造為Spring Boot項目

 更新時間:2017年11月16日 14:18:48   作者:Lovnx  
本篇文章主要介紹了如何將已有項目改造為Spring Boot項目,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

快速創(chuàng)建一個springboot web工程

以IntelliJ IDEA為例:

1、首先創(chuàng)建一個項目,創(chuàng)建時選擇Spring Initializr,然后Next,如下圖:

2、填寫項目信息,如下圖:

3、勾選web

4、最后一步,填寫工程名字點擊finish

第一次創(chuàng)建時系統(tǒng)會去下載需要的依賴,耗時稍長,請耐心等待。

創(chuàng)建成功后,目錄結(jié)構(gòu)如下:項目的根目錄下會有一個artifactId+Application命名規(guī)則的入口類,SpringbootLearningApplication

SpringbootLearningApplication這個類有一個@SpringBootApplication注解,這是整個Spring Boot的核心注解,它的目的就是開啟Spring Boot的自動配置。

@RestController注解,使之變?yōu)橐粋€Controller,然后再在里邊提供一個地址轉(zhuǎn)換方法,如下:

main方法中,右擊選擇run,項目啟動完成后,就可以在瀏覽器中直接訪問了。

訪問路徑是http://localhost:8080。

Tip:

如果是第一次創(chuàng)建會發(fā)現(xiàn),文件上帶有紅圈,文件內(nèi)容不可更改,如下進行設(shè)置:

如何將已有項目改造為Spring Boot項目

1創(chuàng)建可部署的war文件

生成可部署war文件的第一步是創(chuàng)建一個 SpringBootServletInitializer的子類并重寫它的configure方法。這樣就可以利用Spring Servlet 3.0的支持,并允許在servlet容器啟動時配置你的應(yīng)用程序。通常,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);
  }
}

下一步是更新構(gòu)建配置,以便您的項目生成war文件而不是jar文件。如果你使用Maven并使用spring-boot-starter-parent(它為你配置Maven的war插件),你所需要做的就是修改pom.xml文件把工程更改為war工程:

<packaging> war </ packaging>

如果你使用Gradle,你需要修改build.gradle以將war插件用到項目中:

apply plugin:'war'

最后一步是確保內(nèi)置servlet容器不會干擾要部署war文件的servlet容器。為此,您需要按給定方式聲明內(nèi)置servlet容器依賴關(guān)系。

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或更高版本),則應(yīng)繼續(xù)使用providedRuntime。在其他某些限制條件內(nèi), 如果compileOnly依賴不在測試類的路徑中,這將導(dǎo)致任何基于Web的集成測試將失敗。

如果您使用Spring Boot構(gòu)建工具,那么將內(nèi)置Servlet容器依賴關(guān)系標(biāo)記為已提供將產(chǎn)生一個可執(zhí)行文件,并在目錄中打包提供的依賴lib-provided關(guān)系。這意味著,除了被部署到一個servlet容器,也可以使用運行應(yīng)用程序java -jar的命令行上。

看一下Spring Boot的示例應(yīng)用程序,用于上述配置的基于Maven的示例 。

2為舊的servlet容器創(chuàng)建可部署的war文件

較舊的Servlet容器不支持Servlet 3.0中使用的ServletContextInitializer引導(dǎo)進程。 但你仍可以在這些容器中使用Spring和Spring Boot,只是需要添加一個web.xml到應(yīng)用程序中,并配置它通過DispatcherServlet加載一個ApplicationContext。

3將現(xiàn)有應(yīng)用程序轉(zhuǎn)換為Spring Boot

對于非web應(yīng)用程序應(yīng)該很容易(ApplicationContext通過調(diào)用替換為SpringApplication或 SpringApplicationBuilder)。Spring MVC應(yīng)用程序通常需要先創(chuàng)建可部署的war應(yīng)用程序,然后將其遷移到可執(zhí)行的war或jar。jar轉(zhuǎn)war指南

創(chuàng)建一個繼承自SpringBootServletInitializer(例如,在一個叫做類Application)的可部署war包,并添加Spring Boot的

@SpringBootApplication注解。例:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
     //自定義應(yīng)用程序或調(diào)用application.sources(...)添加源
    //因為我們的例子本身是一個@Configuration類(通過@SpringBootApplication)
    //我們實際上不需要重寫這個方法。
    return application;
  }
}

記住,無論你放在什么sources只是一個Spring ApplicationContext,通常已經(jīng)運行東西都繼續(xù)在這里運行??赡苡幸恍゜ean你可以以后刪除,讓Spring Boot為它們提供自己的默認值,但某些工作應(yīng)優(yōu)先進行。

靜態(tài)資源可以移動到/public(或/static或)/resources或 /META-INF/resources)在類路徑根目錄中。messages.properties(Spring Boot在類路徑的根目錄中自動檢測到這一點)也是如此。

Vanilla對Spring DispatcherServlet和Spring Security的使用不需要進一步的修改。如果你的應(yīng)用程序還有其他特性,如使用其他servlet或過濾器,那么你需要添加一些配置到Application context。web.xml中替換的標(biāo)簽如下:

  1. 一個在容器中的Servlet或ServletRegistrationBean類型的帶有@Bean注解的類會被構(gòu)建安裝,如果它在web.xml中被或中被配置的話。
  2. 一個Filter或FilterRegistrationBean類型的帶有@Bean注解的類,其運行方式就像先前被和配置的類。
  3. 一個在XML文件中的ApplicationContext添加一個@Import注解就可以添加進Application。或者在已經(jīng)大量使用注解配置的情況下在幾行代碼中重新定義@Bean注解。

為使war包運行,便需向應(yīng)用程序中添加一個可執(zhí)行的main方法,如

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

[注意]

如果打算將應(yīng)用程序打為war或可執(zhí)行應(yīng)用程序,需要共享建設(shè)者的自定義中,可以執(zhí)行SpringBootServletInitializer回調(diào)方法和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);
  }

}

應(yīng)用程序可以分為多個類別:

  1. 沒有web.xml的Servlet 3.0+應(yīng)用程序。
  2. 帶有web.xml的應(yīng)用程序。
  3. 具有上下文層次結(jié)構(gòu)的應(yīng)用程序。
  4. 沒有上下文層次結(jié)構(gòu)的應(yīng)用程序。

所有這些都應(yīng)該適合轉(zhuǎn)譯,但每個可能需要略有不同的技巧。

如果已經(jīng)使用Spring Servlet 3.0+初始化程序支持類,Servlet 3.0+應(yīng)用程序就很容易轉(zhuǎn)譯。通常現(xiàn)存在 WebApplicationInitializer上的所有代碼都可以遷移到SpringBootServletInitializer。如果現(xiàn)有的應(yīng)用程序有多個ApplicationContext(例如,使用 AbstractDispatcherServletInitializer),那么可以將所有的上下文源合并為單個SpringApplication。其中可能遇到的問題是,如果程序運行失敗,就需要維護上下文層次結(jié)構(gòu)。請參閱 構(gòu)建一個層次的條目的例子。包含Web特定功能的現(xiàn)有父上下文通常需要分解,以便所有ServletContextAware組件都在子上下文中。

非Spring應(yīng)用程序的應(yīng)用程序會更容易轉(zhuǎn)換為Spring Boot應(yīng)用程序,上述指導(dǎo)可能會有所幫助,但過程可能會有所不同。

4將WAR部署到WebLogic

要將Spring Boot應(yīng)用程序部署到WebLogic,必須確保您的servlet初始化程序直接實現(xiàn)WebApplicationInitializer(即使您從已實現(xiàn)它的基類擴展)。

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更合適打包的版本,而不是預(yù)先安裝的版本。您可以通過添加一個WEB-INF/weblogic.xml文件來做到這一點 ,內(nèi)容如下:

<?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容器外使用相同的應(yīng)用程序。但是,可以在舊容器上借助于特殊工具來運行Spring Boot。如果你添加org.springframework.boot:spring-boot-legacy作為依賴(單獨維護 Spring Boot的核心,目前在1.0.2.RELEASE),你所需要做的是創(chuàng)建web.xml并聲明一個context listener、 application context、filters 、servlets 。這個context listener對于Spring Boot是一個特殊的用例,但是對于Servlet 2.5中的Spring應(yīng)用程序,其余部分是一般用法。例:

<?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>

在這個例子中,我們使用的是單個應(yīng)用程序上下文(由context listener創(chuàng)建的)并將其連接到DispatcherServlet用一個參數(shù)初始化。這在Spring Boot應(yīng)用程序中是很常見的(一般只有一個application context)。

英文原版地址:http://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html#howto-convert-an-existing-application-to-spring-boot

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Springboot?過濾器、攔截器、全局異常處理的方案處理小結(jié)

    Springboot?過濾器、攔截器、全局異常處理的方案處理小結(jié)

    攔截器是一種動態(tài)攔截方法調(diào)用的機制,與過濾器類似,是Spring框架中提供的,用來動態(tài)攔截控制器方法的執(zhí)行,這篇文章主要介紹了Springboot?過濾器、攔截器、全局異常處理,需要的朋友可以參考下
    2024-03-03
  • 詳解Java的日期時間新特性

    詳解Java的日期時間新特性

    隨著時間的不斷推移,現(xiàn)實的需求也在不斷更新,原先的一些API已經(jīng)難以滿足開發(fā)需求了,從JDK?8之后,為了滿足更多的開發(fā)需求,Java給我們增加了不少關(guān)于日期時間的新特性,接下來就帶各位來看看這些新特性有哪些,需要的朋友可以參考下
    2023-06-06
  • java8如何用Stream查List對象某屬性是否有重復(fù)

    java8如何用Stream查List對象某屬性是否有重復(fù)

    這篇文章主要介紹了java8如何用Stream查List對象某屬性是否有重復(fù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java責(zé)任鏈模式定義與用法分析

    Java責(zé)任鏈模式定義與用法分析

    這篇文章主要介紹了Java責(zé)任鏈模式定義與用法,結(jié)合具體實例分析了java責(zé)任鏈模式的功能、定義、使用方法、適用情況等,需要的朋友可以參考下
    2017-06-06
  • JAVA過濾標(biāo)簽實現(xiàn)將html內(nèi)容轉(zhuǎn)換為文本的方法示例

    JAVA過濾標(biāo)簽實現(xiàn)將html內(nèi)容轉(zhuǎn)換為文本的方法示例

    這篇文章主要介紹了JAVA過濾標(biāo)簽實現(xiàn)將html內(nèi)容轉(zhuǎn)換為文本的方法,涉及java針對HTML代碼的正則替換相關(guān)操作技巧,需要的朋友可以參考下
    2017-07-07
  • 詳解Java動態(tài)字節(jié)碼技術(shù)

    詳解Java動態(tài)字節(jié)碼技術(shù)

    Java字節(jié)碼增強指的是在Java字節(jié)碼生成之后,對其進行修改,增強其功能,可減少冗余代碼,提高性能等。本文將詳細介紹Java動態(tài)字節(jié)碼技術(shù)。
    2021-05-05
  • Java負載均衡策略的實現(xiàn)詳解

    Java負載均衡策略的實現(xiàn)詳解

    這篇文章主要介紹了Java負載均衡策略的實現(xiàn),負載均衡在Java領(lǐng)域中有著廣泛深入的應(yīng)用,不管是大名鼎鼎的nginx,還是微服務(wù)治理組件如dubbo,feign等,負載均衡的算法在其中都有著實際的使用,需要的朋友可以參考下
    2022-07-07
  • Java反射之通過反射獲取一個對象的方法信息(實例代碼)

    Java反射之通過反射獲取一個對象的方法信息(實例代碼)

    下面小編就為大家?guī)硪黄狫ava反射之通過反射獲取一個對象的方法信息(實例代碼)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • 解決java.util.HashMap$Values?cannot?be?cast?to?java.ut的問題

    解決java.util.HashMap$Values?cannot?be?cast?to?java.ut的問題

    這篇文章主要介紹了解決java.util.HashMap$Values?cannot?be?cast?to?java.ut的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java聊天室之使用Socket實現(xiàn)傳遞對象

    Java聊天室之使用Socket實現(xiàn)傳遞對象

    這篇文章主要為大家詳細介紹了Java簡易聊天室之使用Socket實現(xiàn)傳遞對象功能,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以了解一下
    2022-10-10

最新評論