天天看點

springboot2.x不能使用velocity的解決辦法

項目原先使用的springboot版本号為1.5.1,使用的模闆引擎為velocity。

而目前springboot最新版已經到了2.1.7了,況且springboot已經停止對1.x版本的支援,是以決定将springboot版本更新到2.1.7。

更新過程中踩到特别多的坑,花了太多的時間查找大量的資料才解決,過段時間會寫一個springboot版本更新所有我遇到的坑的解決方案,友善以後少走彎路。

springboot1.5以後就已經停止對velocity的支援了,不僅是springboot。spring5也不再支援velocity了。是以如果還有想用velocity的同學,看到這裡,建議趁早放棄velocity,改用其他模闆引擎,比如freemarker。

其實我更新完以後啟動項目是不報錯的,隻不過背景傳回查找velocity模闆的時候就找不到了,所有請求均為404。主要原因在于,所有有關velocity配置以及渲染的類都來源于

spring-context-support.jar

以及

spring-webmvc.jar

這兩個包中。而在這兩個包最新的版本中,所有有關velocity的類全都删除了。

ps:感覺并沒有做向下相容,至少加一個@Deprecated也是好的。

既然明白了原因,那麼解決方式也就很明了了,隻要将這些已經删除的類再找回來就可以了。我這裡使用的版本是

spring-context-support-4.3.6.RELEASE.jar

spring-webmvc-4.3.6.RELEASE.jar

。所需要的類如下:

springboot2.x不能使用velocity的解決辦法

需要注意的是在

org.springframework.web.servlet.view.velocity.VelocityConfigurer

中有一行代碼

private static final String SPRING_MACRO_LIBRARY = "/velocity/spring.vm";

這個

SPRING_MACRO_LIBRARY

屬性需要改為自己spring.vm存放的位置。

總結

有些人使用的可能是

spring-boot-starter-velocity.jar

這個包來內建的velocity,我的項目中是用了

VelocityAutoConfiguration.java

的裝配器,是以不确定是否适合所有人。當然具體問題具體分析,我相信一定都會有解決方案。

ps:如果需要這些類的人不想再去花功夫尋找,可以留下郵箱,我将這些類打包發給有需要的人。

繼續閱讀