FileNotFoundException при добавлении начального пакета «spring-cloud-starter-aws» в приложение Spring Boot - PullRequest
0 голосов
/ 01 марта 2019

У меня хорошо установлено серверное приложение 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, заглянул в список «Внешние библиотеки» и нашел класс, на который жалуется это исключение.IntelliJ декомпилирует код, и я вижу, что это открытый класс, который содержит открытый внутренний класс AbstractRegistrar.Кажется, что Spring должен найти этот класс.

Любая помощь с этим будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

В дополнение к первоначальной статье, из которой я работал, я просмотрел несколько источников документации.Никто, кажется, не упоминает, что вы не можете просто вставить * spring-cloud-starter-aws * самостоятельно.Я не уверен, в какой степени другие модули, которые я включаю, влияют на это, но я нашел этот модуль в центральном репозитории maven, и добавление его в мой проект решило указанную проблему:

spring-cloud-starter-aws-jdbc

Может быть, яЯ должен был подумать об этом раньше, но вся идея Spring Boot заключалась в том, что, как я думал, конфигурация через соглашение означала, что вы всегда получали что-то от самого стартера.Я не использую JDBC, так зачем мне это включать?Функциональность, требующая его, просто не должна быть доступна, если это не предусмотрено.Это первый раз при использовании Spring Boot, когда включение стартера потребовало от меня включения другого модуля, чтобы избежать исключения времени выполнения.Ну хорошо.

ОБНОВЛЕНИЕ: я нашел немного больше документации в документах Spring Cloud, но это все еще отрывочно.В документах сказано:

Дополнительные зависимости для включения определенных функций, таких как обмен сообщениями и JDBC.Spring Cloud AWS будет настраивать только те классы, которые доступны в classpath приложения Spring Boot

Это вводит в заблуждение.Эти дополнительные зависимости ДОЛЖНЫ быть добавлены ... ПЕРИОД ... независимо от того, хотите ли вы "включить определенные функции", чего я не делаю.

Кстати, я однажды не был полностью вне лесаЯ добавил эту дополнительную зависимость.Я получил два других исключения, которые включали дополнения конфигурации, чтобы исправить.Мне пришлось определить свойства loud.aws.region.static = [мой регион] и cloud.aws.stack.auto = false .Также не очень нравится Spring Boot.Имеет смысл указывать регион AWS, если вы находитесь не в экземпляре EC2, но думать о 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

0 голосов
/ 01 марта 2019

Добавьте следующие зависимости в ваш проект Maven / Gradle: https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-aws

...