防止启动时启动Spring Boot调用EC2MetadataUtils.getItems

时间:2018-07-24 09:31:05

标签: java spring spring-boot

我遇到一个问题,其中在应用程序启动(春季启动应用程序)时调用EC2MetaDataUtils.getItems,我们不使用EC2,因此对AWS进行的获取元数据的调用始终失败,应用程序尝试获取此数据3次,因此这将增加应用程序启动时间约15秒。

我一直在寻找解决方案的高低,我发现一个有前途的解决方案将建议以下@EnableAutoConfiguration(exclude = { ContextResourceLoaderAutoConfiguration.class, ContextResourceLoaderConfiguration.class, ContextInstanceDataAutoConfiguration.class })

但是,当我尝试启动应用程序时,它抱怨ContextResourceLoaderConfiguration.class不能排除,因为它不是自动配置。如果我只排除其他两个,则应用程序仍会调用MetaDataUtils。

任何人过去都经历过并设法解决了吗?

谢谢您的时间。

5 个答案:

答案 0 :(得分:0)

SpringBoot应用程序不应对EC2进行任何调用。这意味着您正在使用某些AWS特定的库/组件/什么,启动时该库会执行此调用。

请检查您的依赖关系和上下文配置。关于SpringBoot没什么。您的自定义依赖项/组件有些问题。

答案 1 :(得分:0)

如果您不使用EC2,则可以尝试从依赖项中删除spring-cloud-aws*库。

答案 2 :(得分:0)

当运行带有AWS依赖项的spring-boot-application时, 它会调用堆栈自动配置,您需要禁用它,

将以下内容添加到application.yml

cloud.aws.stack.auto: false

答案 3 :(得分:0)

您可以使用Spring配置文件来区分云配置文件和默认配置文件。对于云配置文件,您可以使用onResume()工件来获取有关EC2实例的元数据,您需要从附加的IAM角色访问EC2读取权限,而对于默认配置文件,则无需担心云环境并禁用云配置属性,这些属性应不会导致应用程序启动。

答案 4 :(得分:0)

解决以下问题:

@EnableAutoConfiguration(exclude = {ContextInstanceDataAutoConfiguration.class, ContextStackAutoConfiguration.class, ContextResourceLoaderAutoConfiguration.class})