spring boot + apache camel + mongodb 集成问题
Posted
技术标签:
【中文标题】spring boot + apache camel + mongodb 集成问题【英文标题】:spring boot + apache camel + mongodb integration issue 【发布时间】:2018-08-24 05:47:40 【问题描述】:我是 apache camel 的新手,刚刚开始。我有一个 spring boot (MVC) + mongodb 项目已经运行良好,当我尝试将它与 apache camel 集成时,我在控制台上遇到异常。根据我对异常 Spring Boot 的理解,当我在项目的其他任何地方使用 @ComponentScan(basePackages="packagePath")
时,我不能在骆驼路由文件上使用默认注释 @Component
,因为它是 MVC 架构,所以我有控制器、服务& 我不能忽略的存储库,请帮我解决这个问题。
控制台异常
启动 ApplicationContext 时出错。显示条件报告 在启用“调试”的情况下重新运行您的应用程序。 2018-03-15 17:17:55.426 错误 744 --- [主] os.boot.SpringApplication : 应用程序运行失败
org.springframework.beans.factory.BeanDefinitionStoreException: 失败 处理配置类的导入候选 [com.era.conf.ApplicationConfiguration];嵌套异常是 java.lang.IllegalStateException:无法评估条件 org.apache.camel.spring.boot.health.HealthCheckRoutesAutoConfiguration 由于 org/springframework/boot/bind/RelaxedPropertyResolver 没有 成立。确保您自己的配置不依赖于该类。 如果您是 @ComponentScanning 一个 springframework,也会发生这种情况 包(例如,如果您将 @ComponentScan 放在默认包中 错误)在 org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:616) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] 在 org.springframework.context.annotation.ConfigurationClassParser.processDeferredImportSelectors(ConfigurationClassParser.java:548) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] 在 org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:184) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] 在 org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:316) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] 在 org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:233) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] 在 org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:273) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] 在 org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:93) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:693) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] 在 org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE] 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE] 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:388) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1246) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1234) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE] 在 com.era.conf.ApplicationConfiguration.main(ApplicationConfiguration.java:12) [classes/:na] 原因:java.lang.IllegalStateException:不能 评估条件 org.apache.camel.spring.boot.health.HealthCheckRoutesAutoConfiguration 由于 org/springframework/boot/bind/RelaxedPropertyResolver 没有 成立。确保您自己的配置不依赖于该类。 如果您是 @ComponentScanning 一个 springframework,也会发生这种情况 包(例如,如果您将 @ComponentScan 放在默认包中 错误)在 org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:55) ~[spring-boot-autoconfigure-2.0.0.RELEASE.jar:2.0.0.RELEASE] 在 org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:109) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] 在 org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:217) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] 在 org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:606) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] ... 15 常见 帧省略引起:java.lang.NoClassDefFoundError: org/springframework/boot/bind/RelaxedPropertyResolver 在 org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator.isEnabled(HierarchicalPropertiesEvaluator.java:49) ~[camel-spring-boot-2.20.2.jar:2.20.2] 在 org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator.evaluate(HierarchicalPropertiesEvaluator.java:42) ~[camel-spring-boot-2.20.2.jar:2.20.2] 在 org.apache.camel.spring.boot.util.GroupCondition.getMatchOutcome(GroupCondition.java:40) ~[camel-spring-boot-2.20.2.jar:2.20.2] 在 org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:47) ~[spring-boot-autoconfigure-2.0.0.RELEASE.jar:2.0.0.RELEASE] ... 18 常见框架省略引起:java.lang.ClassNotFoundException: org.springframework.boot.bind.RelaxedPropertyResolver 在 java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_102] 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_102] 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_102] 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_102] ...省略了22个常用框架
POM
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
<version>2.20.2</version>
</dependency>
</dependencies>
应用程序配置
package com.era.conf;
@SpringBootApplication
@ComponentScan(basePackages = "com.era.controller")
public class ApplicationConfiguration
public static void main(String[] args) throws Exception
SpringApplication.run(ApplicationConfiguration.class, args);
EmailResponseController
package com.era.controller;
@RestController
@RequestMapping("/emailResponse")
@ComponentScan(basePackages = "com.era.service")
public class EmailResponseController
@Autowired private EmailResponseService serv;
@RequestMapping("/read")
public EmailResponseModel ExchangeServerEmailsReader()
return serv.ExchangeServerEmailsReader();
服务
package com.era.service;
@Service
@EnableMongoRepositories("com.era.repository")
public class EmailResponseServiceImpl implements EmailResponseService
@Autowired private EmailResponseRepository repo;
@Override
public EmailResponseModel ExchangeServerEmailsReader()
final EmailResponseModel emailModel = new EmailResponseModel();
emailModel.setEmail(readEmailsFromExchangeServer());
return repo.save(emailModel);
CamelRouteClass
package com.era.route;
@Component
public class CamelRouteClass extends RouteBuilder
@Override
public void configure() throws Exception
from("file:C://response?noop=true").to("file:C://response2");
【问题讨论】:
这和骆驼无关。为什么要多次使用@ComponentScan
?
你能建议我应该如何使用它吗?
编辑问题并提及您上面提到的所有类的包。
@pvpkiran 包添加到类中
将您的班级ApplicationConfiguration
放在com.era
下,并从任何地方删除您的@ComponentScan
并进行测试
【参考方案1】:
问题是 RelaxedPropertyResolver 已在最新版本的 spring-boot (2.0.0.RELEASE) 中被删除。但是,最新的 camel-spring-boot-starter 模块(编写本文时为 2.20.2)仍然依赖于缺少的 RelaxedPropertyResolver。
要在出现新版本的 Camel 之前解决此问题,您需要将 spring-boot 降级到 1.5.10.RELEASE。
【讨论】:
感谢@ShamimAhmad 解决这个问题,我不想降级 Spring Boot! RelaxedPropertyResolver 似乎是在 Camel 版本 2.18.2 中引入的。 Camel 2.18.1 与 Spring Boot 2.0.2.RELEASE 一起为我工作。 从 2.22.0 版本开始,Camel 支持 Spring Boot 2。见发行说明camel.apache.org/camel-2220-release.html以上是关于spring boot + apache camel + mongodb 集成问题的主要内容,如果未能解决你的问题,请参考以下文章
Apache Ignite 使用 Spring-Boot 加载两次?
apache-shiro 的怪事通过 spring-boot 集成到 spring-mvc 中
mybatis-spring-boot, org.apache.ibatis.binding.BindingException: 无效的绑定语句