用java启动spring boot项目,模版目录无法正常访问

背景描述

由于想快速在服务器上部署一下spring boot的web应用,因此使用了java直接启动spring boot内置tomcat的方式来构建服务,实际上这也是spring boot的一个很大的亮点。
但是接着就遇到了一个很有意思的问题,在项目中使用了Thymeleaf作为模版工具,使用运行jar包的方式进行项目启动的时候,访问页面时出现了500错误,原因为找不到模版文件。
然后这一切在本地开发的过程中并没有出现,这就让人非常摸不到头脑了。

问题原因

后来经过查证和摸索后,想到了可能会不会是在controller映射的时候,使用了错误的映射地址呢?因为我在配置模版的时候是这么写的

# Prefix that gets prepended to view names when building a URL.
spring.thymeleaf.prefix=classpath:/templates/

而我在controller里面有的页面写成了这样的,注意这里的return值,在路径的最前面加了"/"

@RequestMapping("/admin/index")
private String adminIndex(ModelMap map){
    //TODO something
    return "/admin/index";
}

经过尝试修改之后,将多余的"/"去掉之后,一切就正常了。

因此这就非常有意思了,为什么同样的代码,我开发启动的时候就没有问题,但是使用jar启动的时候就会有这个问题呢。
对比了一下我通过使用mvn spring-boot:run启动服务和使用java -jar xx.jar启动服务时候的日志差异,发现前者使用的是target下面的classes文件下下面的内容,实际上在启动中尝试替换了文件下下面的静态文件也确实生效了。而后者则是使用了jar包这个Archive下面的classes文件。

2016-07-07 14:44:21  [ main:0 ] - [ INFO ]  Starting Application on Lenovo-PC with PID 4320 (G:\java_workspace\xxx\target\classes started by zhf in G:\java_workspace\xxx)
2016-07-07 14:44:21  [ main:32 ] - [ DEBUG ]  Running with Spring Boot v1.3.2.RELEASE, Spring v4.2.4.RELEASE
[INFO ] 2016-07-07 14:50:55,844 method:org.springframework.boot.StartupInfoLogger.logStarting(StartupInfoLogger.java:48)
Starting Application v1.0.0-SNAPSHOT on Lenovo-PC with PID 8472 (G:\java_workspace\xxx\target\WebSite-1.0.0-SNAPSHOT.jar started by zhf in G:\java_workspace\xxx\target)
[DEBUG] 2016-07-07 14:50:55,849 method:org.springframework.boot.StartupInfoLogger.logStarting(StartupInfoLogger.java:51)
Running with Spring Boot v1.3.2.RELEASE, Spring v4.2.4.RELEASE

但造成这两者的具体差异,还需要之后进一步分析研究才能知道,目前先记录下这个问题,之后有时间了再进一步进行探索。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值