我遇到一个问题,其中在应用程序启动(春季启动应用程序)时调用EC2MetaDataUtils.getItems,我们不使用EC2,因此对AWS进行的获取元数据的调用始终失败,应用程序尝试获取此数据3次,因此这将增加应用程序启动时间约15秒。
我一直在寻找解决方案的高低,我发现一个有前途的解决方案将建议以下@EnableAutoConfiguration(exclude = { ContextResourceLoaderAutoConfiguration.class, ContextResourceLoaderConfiguration.class, ContextInstanceDataAutoConfiguration.class })
但是,当我尝试启动应用程序时,它抱怨ContextResourceLoaderConfiguration.class不能排除,因为它不是自动配置。如果我只排除其他两个,则应用程序仍会调用MetaDataUtils。
任何人过去都经历过并设法解决了吗?
谢谢您的时间。
答案 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})