将新版本的Spring应用程序部署到ElasticBeanstalk,是否未调用@PreDestroy?

时间:2015-10-20 22:59:45

标签: java spring spring-mvc amazon-web-services

我目前正在使用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永远不会被调用。

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

在经历了许多痛苦和痛苦之后,我弄清楚发生了什么。

我在T1.micro实例上运行我的ELB(免费等级宝贝!)。显然它非常有限,以至于它没有足够的内存让JVM正常关闭,因此每次上下文刷新都伴随着JVM崩溃。 JVM崩溃=没有关闭序列。

解决方案是将实例大小增加到t2.small。不再是免费的,但我的应用程序不再爆炸,这很好。