当前位置: 首页 > 知识库问答 >
问题:

将“spring cloud starter aws”启动程序包添加到spring Boot应用程序时出现FileNotFoundException

魏安然
2023-03-14

我有一个成熟的Spring Boot服务器应用程序。我正在通过一篇文章来配置Spring以将指标发送到AWS Cloudwatch。

当我包含启动程序包Spring-Cloud-starter-aws时,我遇到了运行时异常。有人能告诉我为什么我得到了这个例外,我能做些什么来解决这个问题吗?

以下是两种摘要形式的例外:

Caused by: java.io.FileNotFoundException: class path resource [org/springframework/cloud/aws/jdbc/config/annotation/AmazonRdsInstanceConfiguration$AbstractRegistrar.class] cannot be opened because it does not exist

长格式:

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [org.springframework.cloud.aws.autoconfigure.jdbc.AmazonRdsDatabaseAutoConfiguration]; nested exception is java.io.FileNotFoundException: class path resource [org/springframework/cloud/aws/jdbc/config/annotation/AmazonRdsInstanceConfiguration$AbstractRegistrar.class] cannot be opened because it does not exist
at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:599)
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:302)
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:242)
at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:589)
at org.springframework.context.annotation.ConfigurationClassParser.access$900(ConfigurationClassParser.java:108)
at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.lambda$processGroupImports$1(ConfigurationClassParser.java:808)
at java.util.ArrayList.forEach(ArrayList.java:1257)
at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:804)
at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:774)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:185)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:315)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:232)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:691)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:528)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
at com.inlet.ifserver.IfserverApplication.main(IfserverApplication.java:19)

Caused by: java.io.FileNotFoundException: class path resource [org/springframework/cloud/aws/jdbc/config/annotation/AmazonRdsInstanceConfiguration$AbstractRegistrar.class] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:180)
at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:51)
at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:103)
at org.springframework.boot.type.classreading.ConcurrentReferenceCachingMetadataReaderFactory.createMetadataReader(ConcurrentReferenceCachingMetadataReaderFactory.java:88)
at org.springframework.boot.type.classreading.ConcurrentReferenceCachingMetadataReaderFactory.getMetadataReader(ConcurrentReferenceCachingMetadataReaderFactory.java:75)
at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:81)
at org.springframework.context.annotation.ConfigurationClassParser.asSourceClass(ConfigurationClassParser.java:685)
at org.springframework.context.annotation.ConfigurationClassParser$SourceClass.getSuperClass(ConfigurationClassParser.java:998)
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:332)
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:242)
at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:589)
... 20 more

我使用IntelliJ,查看了“External Libraries”列表,发现了这个异常所抱怨的类。IntelliJ反编译代码,我可以看到它是一个公共类,包含一个公共抽象类。看来斯普林应该找到这门课了。

任何对此的帮助都将不胜感激。

共有1个答案

惠志
2023-03-14

除了第一篇文章之外,我还查阅了多个文档来源。似乎没有人提到你不能独自去“Spring云启动程序aws”。我不确定我包含的其他模块对这一点有多大影响,但我在maven central repository中找到了这个模块,并将其添加到我的项目中解决了上述问题:

spring-cloud-starter-aws-jdbc

也许我应该早点想到这一点,但Spring Boot的整个想法是,我认为,通过约定进行配置意味着你总是能从启动器本身获得一些东西。我没有使用JDBC,那么为什么我需要包括这个呢?如果不提供,需要它的功能就不应该可用。这是第一次使用Spring Boot,包括一个启动器,我需要包括另一个模块,以避免运行时异常。哦,好吧。

更新:我在Spring Cloud文档中找到了更多文档,但仍然很粗略。医生说

必须添加额外的依赖项,以支持消息传递和JDBC等特定功能。Spring Cloud AWS将只配置Spring Boot应用程序的类路径中可用的类

这是误导。必须添加这些额外的依赖项。。。时期不管你是否想“启用特定功能”,我不想。

顺便说一句,我并没有完全摆脱困境,一旦我添加了这个额外的依赖。我还有另外两个例外,涉及要修复的配置添加。我必须大声定义属性。aws。区域静态=[my region]和云。aws。堆栈自动=错误。也不是很像Spring的靴子。如果不在EC2实例上,就必须指定AWS区域是有意义的,但如果我不使用它,就必须考虑CloudFormation。Spring Cloud文档至少在以下几点上更加清晰:https://cloud.spring.io/spring-cloud-aws/1.2.x/#_configuring_region和https://cloud.spring.io/spring-cloud-aws/1.2.x/#_cloudformation_configuration_in_spring_boot

 类似资料:
  • 我有一个建立在Spring启动基础上的后端,然后我学校的一些定制代码建立在这个基础上。前端是纯粹的角度应用程序,我从不同的服务器上通过一大口服务提供。他们只通过REST调用连接。 后端已经运行了一个身份验证模块,现在我需要从后端运行的同一tomcat服务器为这个角应用程序提供服务,这样它也可以使用这个身份验证模块。 我发现这是关于多个连接器的,所以我将其复制为以下类来设置多个连接器: 问题是我没有

  • 我在stackoverflow上发现了类似的问题,并试图用这种方式(LINK)解决这个问题,但在我的项目中没有起作用。谁能给我一些建议吗? pom.xml 应用属性

  • 问题内容: 为了加快JVM的启动时间,Sun开发人员认为在JVM的安装过程中预编译平台的标准运行时类是一个好主意。这些预编译的类可以在以下位置找到: $ JAVA_HOME \ jre \ bin \ client \ classes.jsa 我公司目前正在开发一个带有独立JRE的Java独立应用程序,因此,通过向此jsa文件中添加我们自己的应用程序类来加快我们的应用程序启动时间也是一个不错的选择

  • 我试图在Heroku上推动我的Spring Boot应用程序,我得到了一个错误:未能用Maven构建应用程序,即未能执行目标org.apache.Maven.plugins:maven-compiler-plugin:3.8.1:compile(default-compile)on project BlogApplication:致命错误编译:无效的目标版本:11。 日志: pom.xml

  • 问题内容: 我想使用文件浏览器创建文本编辑器,所以当我启动应用程序时,我想在程序中在JTree上添加节点,以便它向我显示所有文件和文件夹,例如在“我的文档”文件夹中,并允许我访问这些文件和文件夹(尤其是文件夹)。我试图从这个例子中弄清楚安德鲁·汤普森是如何做到的, 但是我失败了。我使用此示例为“我的文档”中的所有文件和文件夹创建了节点 。但这就是全部,当单击表示文件夹的节点之一时,我无法弄清楚如何

  • 使用spring-boot时,一切工作都很好。尽管如此,在spring-boot中已删除了注释和。我试图将代码重构为新版本,但我做不到。对于以下测试,我的应用程序在测试之前没有启动,http://localhost:8080返回404: 如何重构测试以使其在Spring-Boot1.5中工作?