我目前正在使用Spring Boot,Tomcat和AWS Elastic Beanstalk。
我有几个bean,我想在重新启动服务器之前将一些信息保存到磁盘,然后在服务器重新启动时重新加载。
我所看到的是,只要应用程序启动,就会调用@PostConstruct
带注释的函数,但我从未看到@PreDestroy
被调用。
我假设在更新环境(单一环境)时正在正常关闭上下文。是否需要添加到Application属性以使其调用@PreDestroy
?
我使用了所有注释,并且没有使用XML配置。
@Component
public class SomeStructs {
static Logger log = LoggerFactory.getLogger(BuzzStructs.class);
@PostConstruct
public void onCreate(){
log.info("Creating Buzz Structs!");
}
@PreDestroy
public void onDelete(){
log.info("Deleting Buzz Structs!");
System.out.println("Deleting Junk");
}
}
对于这段代码,始终会调用@PostConstruct
,但@PreDestroy
永远不会被调用。
感谢任何帮助!
答案 0 :(得分:0)
在经历了许多痛苦和痛苦之后,我弄清楚发生了什么。
我在T1.micro实例上运行我的ELB(免费等级宝贝!)。显然它非常有限,以至于它没有足够的内存让JVM正常关闭,因此每次上下文刷新都伴随着JVM崩溃。 JVM崩溃=没有关闭序列。
解决方案是将实例大小增加到t2.small。不再是免费的,但我的应用程序不再爆炸,这很好。