弹簧引导以Jar的方式部署启动,这个不用介绍了,之前也介绍了关于弹簧引导+ thymeleaf的简单使用,但是今天遇到一个问题,我先描述下问题的场景:
由于运维部门的需求,项目需要以<代码> 代码>战争的形式放到tomcat <代码> 代码>运行,,而不是原定的jar <代码> 代码>的方式运行
配置了一下午,也查了一下午的资料,以<代码> 代码>战争的方式在Tomcat <代码> 代码>能运行,并且能访问<代码>控制器> 代码,但是在返回html视图时,找不到视图模板。最终发现问题在<代码> Thymeleaf> 代码的配置,话不多说,具体看操作步骤:
<强> 1,弹簧引导容器配置需要继承,SpringBootServletInitializer 强>
这里我继承的是<代码> web.suport> 代码下面的<代码> SpringBootServletInitializer> 代码。
@SpringBootApplication 公共类的应用程序扩展SpringBootServletInitializer { @Override 保护SpringApplicationBuilder配置(SpringApplicationBuilder应用程序){ 返回application.sources (Application.class); } 公共静态void main (String [] args){抛出异常 SpringApplication.run (Application.class, args); } }
<强> 2,更新你的Maven或Gradle打包方式配置强>
下一步是更新你的构建配置,这样你的项目将产生一个战争包而不是jar包。如果你使用<代码> Maven> 代码,并使用<代码> spring-boot-starter-parent> 代码(为了配置战争Maven的插件),所有你需要做的就是更改<代码> pom.xml 代码>的<代码> 代码>包装为战争<代码> 代码>:
& lt; packaging> war
如果你使用<代码> Gradle> 代码,你需要修改<代码> build.gradle> 代码来将<代码> 代码>战争插件应用到项目上:
应用插件:“战争”
<强> 3,确保内嵌的servlet容器不能干扰战争包将部署的servlet容器强>
为了达到这个目的,你需要将内嵌容器的依赖标记为<代码> 代码>。
如果使用Maven 代码>:<代码>
& lt; dependencies> & lt; !——…比; & lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-tomcat & lt; scope> provided & lt;/dependency> & lt; !——…比; & lt;/dependencies>
如果使用<代码> Gradle 代码>:
依赖关系{//? providedRuntime org.springframework.boot: spring-boot-starter-tomcat”//? }
以上步骤配置好,maven或Gradle在<代码> 代码构建的时候就会打成<代码> 代码>包,这里可能还需要注意一个编码的问题,这个就大家自己去找了,具体详情参照:春源码
配置好这些,确实能在Tomcat <代码> 代码>启动了,但是对于控制器<代码> 代码>返回页面视图,却还不够,还需要配置模板的参数,这里我使用的是<代码> Thymeleaf> 代码,所以就介绍<代码> Thymeleaf> 代码的配置方式
<强> 4,Thymeleaf的配置强>
如果你是用的。<代码>属性> 代码方式配置的参数,那么只需要在你的<代码> application.properties> 代码配置下面加上:
# THYMELEAF (ThymeleafAutoConfiguration) spring.thymeleaf.check-template-location=true spring.thymeleaf.prefix=类路径://模板 spring.thymeleaf.suffix=. html HTML5 spring.thymeleaf.mode=spring.thymeleaf.encoding=utf - 8 spring.thymeleaf.content-type=text/html spring.thymeleaf.cache=false
每一个配置项的具体意思就自己去查了,这里不细说,,如果你是用<代码> .yml> 代码的方式进行配置项的话,那么需要在<代码> application.yml> 代码里面配置如下参数:
春天: thymeleaf: 缓存:假 check-template-location:真 前缀:类路径://模板 后缀:. html 模式:HTML5 utf - 8编码: 的content - type: text/html
其实重要的就是<代码>前缀> 代码,因为放到tomcat <代码> 代码>里面之后,,<代码> Thymeleaf ,> 代码就找不到默认的<代码> 代码>模模板板路径了,所以这里需要重新指明一下,这个问题也困扰了我一下午加一晚上,刚刚才调完,现在记录下,后人谨记! !
<强>总结