防止bean在spring cloud bootstrap上下文中构建

时间:2017-02-28 11:45:11

标签: java spring spring-cloud

我的spring-cloud应用程序中的带注释的spring bean正在创建两次。我假设这是因为它们构建到引导上下文中,然后构建到子应用程序上下文中。

对我来说,这是不可取的,因为有些是用@Scheduled注释来执行它们从后端数据源提供的数据的定期刷新,这对于每个上下文一次快速连续发生两次。

如果它没有其他方面的危害,那么我可以禁用在引导程序上下文中创建的所有应用程序bean吗?如果没有,那么当我在引导程序上下文中运行时,我可以在代码中检测到吗?我使用完全基于注释的bean,并在Camden SR4版本上启用了组件扫描。

1 个答案:

答案 0 :(得分:0)

好的,我自己解决了这个问题。它只涉及代码中的两个不同问题,与多个上下文无关。

首先,我长期以来认为@PostConstruct方法只被称为一次是错误的。将我的一次性bean初始化代码移动到ApplicationListener<ApplicationReadyEvent>的实现解决了那个问题。

其次,我通过多次初始化带有@Scheduled注释的bean会导致调度程序多次运行。公平地说,documentation中记录了这种行为。通过将计划任务创建移动到ScheduledExecutorService实现中设置的常规Java ApplicationReadyEvent,可以轻松解决此问题。