jdk1.6環境下struts2改spring boot方案
公司目前上線的兩個項目都是比較老的,java版本是jdk1.6,mvc框架使用的是strus2。
隨著不久前struts2官方公布新的安全漏洞,我們也不得不做出相應的整改措施,除了之前博文中所說把struts2改為spring mvc外,還把其中部分項目的struts2改成了spring boot,由於各種原因,領導安排由我給出相應的整改方案,然後其他同事參考。
Spring boot中內嵌tomcat服務器,不需要再專門對tomcat軟件進行維護,同時遵循“約定優於配置”,如果整個項目都改成spring boot的話,將會少很多配置文件,不過我們隻是改struts2涉及的地方,相對而言改動實際並不是很大。
要給出可行方案,自然需要實際操作成功整合,以下是整個整改過程:
一、使用maven創建springboot項目,spring boot版本選擇為1.4.3,自動依賴的spring版本是4.3.5,選擇了web啟動依賴。
需要說明的是,我這裏創建項目時使用了eclipse中的spring tools插件,目前能創建的最低版本是1.4.7,然後默認導入的spring相關的jar包是4.3.9。
但是應上邊領導要求,目前不能升級jdk,導致4.3.9的spring在啟動項目時拋出jdk版本不兼容的異常,於是手動把spring boot的版本改為了1.4.3,默認導入的spring版本降為了4.3.5。
這種方式創建項目後,maven的pom.xml文件主要的幾個內容如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
二、增加jdk1.6和tomcat7相關配置
Spring boot項目默認使用的是jdk1.7和tomcat8.5,官方也建議使用1.7以上的jdk,但由於我們暫時不能升級,因此隻能使用jdk1.6,這就需要更改默認的配置,把jdk改為支持1.6,把tomcat改為tomcat7,根據spring boot的官方說明,需要在pom.xml文件中加入一些配置:
首先是properties中加入如下配置
<java.version>1.6</java.version>
<tomcat.version>7.0.59</tomcat.version>
<jetty.version>8.1.15.v20140411</jetty.version>
<jetty-jsp.version>2.2.0.v201112011158</jetty-jsp.version>
其次是dependences中加入如下配置
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
<exclusions>
<exclusion>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
三、克隆項目代碼和配置
使用struts2,或者說常規的web項目都有web.xml文件,而spring boot不需要web.xml文件,因此拷貝的時候,web.xml就可以略過。
其他部分,不論是具體代碼還是配置文件,都按原來的層級結構原封不動的拷過來,以期盡可能小的改動,改動越小,出錯幾率越低。
四、根據編譯報錯的地方補全jar包
原本的項目沒有使用maven,所依賴的jar包都是放在lib文件夾下,也就是全部手動導入,而spring boot項目本身就使用了maven創建,因此所有依賴包也都已maven配置的方式導入。
在初始spring boot項目下考入之前整個項目代碼,自然就會缺少相關的jar包從而編譯出錯,此時首要任務便是根據eclipse工具中醒目的錯誤提示依次補全相關依賴包。
五、改造struts2的action為spring的controller
原本提供給外部的控製層是繼承了struts2的actionsupport類,然後再在struts2的配置文件中配置url,改為spring boot方式後,web控製器這部分實際上就是spring mvc,因此需要把原本的action改為spring mvc的方式,也就是加上spring mvc控製器相關的注解,如@Controller和@RequestMapping。
與此同時,struts2相關的jar包和xml配置文件自然也都不在需要了。
六、添加配置文件加載類
原本啟動項目時tomcat需要加載web.xml文件,同時在web.xml中配置了spring初始文件的加載,spring boot項目中沒有了web.xml,也不再依賴外部tomcat,因此需要采用其他措施在啟動時加載spring初始文件,也就是使用spring boot的文件加載類
package com;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
@Configuration
@ImportResource(value = "classpath:config1/applicationContext.xml")
public class MyConfig {
}
這裏有一個需要注意的細節是:spring boot默認隻掃描spring boot啟動類同包以及啟動類所在包的子包下的內容,因此如果想要不手動配置掃描路徑的話,就需要把這個類放在啟動類所在包或子包下。
如果沒有放在啟動類所在包或子包下,就需要在啟動類上加入@ComponentScan注解指定需要掃描的包。
七、解決運行時的異常
上邊已經借助eclipse的提示解決了編譯錯誤,再配置好相應的啟動配置文件後,就可以啟動項目,根據啟動過程拋出的異常再做具體的處理,例如spring裝配bean的過程中找不到對應的類。
當解決完啟動的一些異常之後,項目看起來便像是成功改造了,但實際上隻是看起來而已,我們還需要瀏覽器訪問配置的url,看運行時是否還有異常,例如具體的類中注入某個對象時發現相應的bean不存在。
經過這樣七個步驟之後,我們的struts2改spring boot的任務便算是大功告成了。隻不過,這裏隻是改struts2模塊而已,所以原本的配置文件依然都還存在,如果後期需要把整個項目都改成spring boot方式,或許那些xml文件就都將不複存在了。
最後更新:2017-09-12 13:32:32