Java 防止在spring云引导上下文中构造bean

Java 防止在spring云引导上下文中构造bean,java,spring,spring-cloud,Java,Spring,Spring Cloud,我的SpringCloud应用程序中的带注释的Springbean被创建了两次。我假设这是因为它们被构造到引导上下文中,然后被构造到子应用程序上下文中 对我来说,这是不可取的,因为有些是用@Scheduled注释的,以便对它们从后端数据源提供的数据执行定期刷新,并且这种情况会快速连续发生两次,每个上下文一次 如果它没有其他危害,那么我可以禁用所有在引导上下文中创建的应用程序bean吗?如果不是,那么当我在引导上下文中运行时,我能在代码中检测到吗?我使用完全基于注释的bean,在Camden SR

我的SpringCloud应用程序中的带注释的Springbean被创建了两次。我假设这是因为它们被构造到引导上下文中,然后被构造到子应用程序上下文中

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


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

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


首先,我长期以来一直认为一个
@PostConstruct
方法只调用过一次是错误的。将我的一次性bean初始化代码移动到
ApplicationListener的实现中。通过将计划任务创建移动到在
ApplicationReadyEvent
实现中设置的常规java
ScheduledExecutorService
,可以轻松解决这一问题。

Spring Cloud不进行任何组件扫描或引导中的任何操作。所以,如果它们是在那里被创造出来的,你自己就做了。“一个样本会很有用的。”DaveSyer已经做了进一步的调查。此服务添加另一个servlet以执行代理功能。代理servlet本身是一个bean,但有一个
ServletRegistrationBean
来注册它。第二个上下文似乎是用新servlet创建的。我正在调查是否可以创建它来共享spring boot创建的根WebApplicationContext。