我的spring-cloud应用程序中的带注释的spring bean正在创建两次。我假设这是因为它们构建到引导上下文中,然后构建到子应用程序上下文中。
对我来说,这是不可取的,因为有些是用@Scheduled
注释来执行它们从后端数据源提供的数据的定期刷新,这对于每个上下文一次快速连续发生两次。
如果它没有其他方面的危害,那么我可以禁用在引导程序上下文中创建的所有应用程序bean吗?如果没有,那么当我在引导程序上下文中运行时,我可以在代码中检测到吗?我使用完全基于注释的bean,并在Camden SR4版本上启用了组件扫描。
答案 0 :(得分:0)
好的,我自己解决了这个问题。它只涉及代码中的两个不同问题,与多个上下文无关。
首先,我长期以来认为@PostConstruct
方法只被称为一次是错误的。将我的一次性bean初始化代码移动到ApplicationListener<ApplicationReadyEvent>
的实现解决了那个问题。
其次,我通过多次初始化带有@Scheduled
注释的bean会导致调度程序多次运行。公平地说,documentation中记录了这种行为。通过将计划任务创建移动到ScheduledExecutorService
实现中设置的常规Java ApplicationReadyEvent
,可以轻松解决此问题。