89. Spring boot devtools使用异常【从零开始学Spring Boot】

springboot + devtools(热部署)【从零开始学Spring Boot】

章节中我们已经介绍了spring boot中使用devtools的基本步骤以及一些注意事项了,本节针对于网友的一些问题,在总结出一些注意点,以及在实际开发中一些重要的地方。

       问题的提出:

       在devtools中在编写一个普通的程序时,都是能够运行的很正常的,但是和其它进行一起运行的时候,可能就会出现各种各样的问题了,比如:登录之后,然后修改了一些代码之后devtools就restart,然后重新一访问又重新登录了。

(1)devtools restart session设置为restart之后依然存在

       如果restart之后session失效的话,那么就会造成需要重新登录问题,这个问题很好解决,只需要在application.properties添加如下配置:

server.session.persistent=true

注意在spring boot 1.3.3 / 1.4.0默认就是true。

 

(2)修改模板文件restart不生效

       模板文件不生效主要是由于模板有缓存,只要把缓存给关闭即可,配置application.properties文件:

#模板引擎:thymeleaf;

spring.thymeleaf.cache=false

#Javascript 语言的模板引擎:Mustache

spring.mustache.cache=false

#模板引擎:velocity

spring.velocity.cache=false

#groovy模板

spring.groovy.template.cache

 

(3) causing ClassCastException while getting from cache.

       当在使用缓存的时候,可能就会抛出如上的异常信息了,这是devtools已知的限制。当缓存条目被反序列化时,对象无法附加到合适的类加载器。

       有一些方法可以修复这样的问题:

(1)当运行在开发环境的时候,禁用缓存,配置spring.cache.type=NONE

(2)使用一个不同的缓存管理器(假如你正在使用spring boot 1.3,你能够强制使用simple cache manager通过在application-dev.properties配置spring.cache.type,并且使用在你的IDE中启用dev profile)

(3)在应用程序类加载器配置缓存,这种比较复杂,需要新建META-INF/spring-devtools.properties

文件进行配置,支持restart.exclude. and restart.include.

例如:

restart.include.companycommonlibs=/mycorp-common-[\\w-]+\.jar

restart.include.projectcommon=/mycorp-myproj-[\\w-]+\.jar

 

 

       好了使用devtools还是有好多坑的,还是希望官方在这方面能够多下功夫,比如如果能支持指定某一些类不重新加载等等的这样的配置或者整个加载器能够编写的更加强大就好了。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值