2016-01-13 65 views
2

我想要做的是將jar文件與已配置的消息傳遞隊列配合使用。 我的項目結構如下:我模塊模擬器它採用MQ-API模塊(Maven中的條款)Spring引導自動配置無法將屬性文件從jar綁定到bean

模擬器

package emulator; 

@ComponentScan(basePackageClasses = {MqConfig.class}) 
@SpringBootApplication 
public class Application { 
    static final Logger log = LoggerFactory.getLogger(Application.class); 


    public static void main(String[] args) throws InterruptedException { 
     SpringApplication.run(Application.class, args); 
    } 


} 

春季啓動應用程序mq-api

package mq; 

@Configuration 
@EnableRabbit 
@ImportResource(value = "classpath:/mq.properties", reader = PropertiesBeanDefinitionReader.class) 
public class MqConfig { 
    @Bean 
    public TopicExchange topicExchange() { 
     return new TopicExchange("exc"); 
    } 
} 

個mq.propertiesMQ-api.jar中

spring.rabbitmq.host=localhost 

運行模擬器應用我有異常中:

14:38:22.447 ERROR o.s.boot.SpringApplication - Application startup failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'spring.rabbitmq': Instantiation of bean failed; nested exception is java.lang.IllegalStateException: No bean class specified on bean definition 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1105) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1050) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:838) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:347) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:295) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1112) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1101) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at net.tipstery.emulator.Application.main(Application.java:24) [classes/:na] 
Caused by: java.lang.IllegalStateException: No bean class specified on bean definition 
    at org.springframework.beans.factory.support.AbstractBeanDefinition.getBeanClass(AbstractBeanDefinition.java:356) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:66) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1098) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
    ... 17 common frames omitted 

如果我刪除@ImportResource應用程序啓動無錯誤當然跳過配置文件mq.properties

我使用彈簧引導1.3.0(啓動啓動器,* -starter-amqp)

+4

你爲什麼試圖導入屬性文件作爲資源而不是'@ PropertySource'? '@ ImportResource'用於導入包含bean定義的文件。 –

+0

謝謝,這是有效的! – fraer

回答

2

作爲@M。 Deinum指出,@ImportResource是用於從XML文件導入bean定義。它不適用於加載屬性文件。爲了加載屬性文件,您可以使用@PropertySource。看看這個post就是一個很好的例子。

+0

謝謝,這是有效的! – fraer

相關問題