Spring Boot,仅加载环境配置

时间:2018-12-08 08:01:51

标签: spring spring-boot spring-config

我创建了一些工作人员类来处理他们从作业服务器中拾取的作业。 要执行的代码取决于使用spring-config + application.properties设置的一些环境变量。

此刻,我正在运行SpringApplication.run(app.class)来初始化spring boot,然后再启动worker,以便我的代码库可以通过ApplicationContext.getBean()访问环境变量。

问题在于,由于工作人员使用while(true)循环,因此不会触发spring shutdown钩子。因此,每次接收并执行新作业时,新实例化的对象都会加载到Spring类加载器中。这些对象没有在GC中,因为它们在类加载器中具有引用,因此Metaspace不断增长,导致出现OOM异常。

删除Spring引导程序,并将环境变量硬编码到代码中可以解决此问题,但这显然不是实际的解决方案。

我不确定如何解决此问题,并且愿意提出建议。理想情况下,我想加载spring-config,这样我就可以访问Bean和环境变量,而无需处理类加载器或任何其他spring开销。

0 个答案:

没有答案