在springboot + devtools(热部署)【从零开始学Spring Boot】
章节中我们已经介绍了spring boot中使用devtools的基本步骤以及一些注意事项了,本节针对于网友的一些问题,在总结出一些注意点,以及在实际开发中一些重要的地方。
问题的提出:
在devtools中在编写一个普通的程序时,都是能够运行的很正常的,但是和其它进行一起运行的时候,可能就会出现各种各样的问题了,比如:登录之后,然后修改了一些代码之后devtools就restart,然后重新一访问又重新登录了。
(1)devtools restart session设置为依然存在
如果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还是有好多坑的,还是希望官方在这方面能够多下功夫,比如如果能支持指定某一些类不重新加载等等的这样的配置或者整个加载器能够编写的更加强大就好了。