Error creating bean with name 'amqpTemple' Could not resolve matching constructor (hint: specify

来源:互联网 发布:淘宝4.2 编辑:程序博客网 时间:2024/05/21 15:50

配置spring rabbitmq 环境遇到

严重: Exception sending context initialized event to listener instance of class com.bimatrix.revit.web.ContextLoaderListenerorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messageProducer': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'amqpTemplate': Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:308)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762)at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)at com.bimatrix.revit.web.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:25)at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887)at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)at java.util.concurrent.FutureTask.run(Unknown Source)at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)at java.lang.Thread.run(Unknown Source)Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'amqpTemplate': Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:239)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1131)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1034)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:458)at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:432)at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:556)at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:155)at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:305)... 23 more五月 25, 2016 11:33:40 下午 org.apache.catalina.core.StandardContext startInternal严重: Error listenerStart五月 25, 2016 11:33:40 下午 org.apache.catalina.core.StandardContext startInternal严重: Context [/revitbus] startup failed due to previous errors五月 25, 2016 11:33:40 下午 org.apache.catalina.core.ApplicationContext log信息: Closing Spring root WebApplicationContext五月 25, 2016 11:33:40 下午 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc严重: The web application [/revitbus] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.五月 25, 2016 11:33:40 下午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads严重: The web application [/revitbus] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak.五月 25, 2016 11:33:40 下午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads严重: The web application [/revitbus] appears to have started a thread named [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0] but has failed to stop it. This is very likely to create a memory leak.五月 25, 2016 11:33:40 下午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads严重: The web application [/revitbus] appears to have started a thread named [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1] but has failed to stop it. This is very likely to create a memory leak.五月 25, 2016 11:33:40 下午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads严重: The web application [/revitbus] appears to have started a thread named [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2] but has failed to stop it. This is very likely to create a memory leak.五月 25, 2016 11:33:40 下午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads严重: The web application [/revitbus] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak.五月 25, 2016 11:33:40 下午 org.apache.coyote.AbstractProtocol start信息: Starting ProtocolHandler ["http-nio-8080"]五月 25, 2016 11:33:40 下午 org.apache.coyote.AbstractProtocol start信息: Starting ProtocolHandler ["ajp-bio-8009"]五月 25, 2016 11:33:40 下午 org.apache.catalina.startup.Catalina start信息: Server startup in 9576 ms五月 25, 2016 11:34:38 下午 org.apache.catalina.loader.WebappClassLoader loadClass信息: Illegal access: this web application instance has been stopped already.  Could not load com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.java.lang.IllegalStateExceptionat org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1600)at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)at com.mchange.v2.resourcepool.BasicResourcePool.checkIdleResources(BasicResourcePool.java:1481)at com.mchange.v2.resourcepool.BasicResourcePool.access$2000(BasicResourcePool.java:32)at com.mchange.v2.resourcepool.BasicResourcePool$CheckIdleResourcesTask.run(BasicResourcePool.java:1964)at java.util.TimerThread.mainLoop(Unknown Source)at java.util.TimerThread.run(Unknown Source)


mq.xml 配置文件如下 



<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit"xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd     http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd     http://www.springframework.org/schema/rabbit     http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd">     <!--配置connection-factory,指定连接rabbit server参数 --><rabbit:connection-factory id="connectionFactory" port="5672"  username="guest" password="guest" host="127.0.0.1"/>    <!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成 --><rabbit:admin connection-factory="connectionFactory" /><!--定义queue --><rabbit:queue name="queueTest" durable="true" auto-delete="false" exclusive="false" /><!-- 定义direct exchange,绑定queueTest --><rabbit:direct-exchange name="exchangeTest" durable="true" auto-delete="false"><rabbit:bindings><rabbit:binding queue="queueTest" key="queueTestKey"></rabbit:binding></rabbit:bindings></rabbit:direct-exchange><bean id="jsonMessageConverter"          class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter"></bean><!--定义rabbit template用于数据的接收和发送 --><rabbit:template id="amqpTemplate"  connection-factory="connectionFactory"     exchange="exchangeTest"   message-converter="jsonMessageConverter" />  <!-- 消息接收者 --><bean id="messageReceiver" class="com.bimatrix.revit.mq.MessageConsumer"></bean><!-- queue litener  观察 监听模式 当有消息到达时会通知监听在对应的队列上的监听对象-->    <rabbit:listener-container connection-factory="connectionFactory">             <rabbit:listener queues="queueTest" ref="messageReceiver"/>    </rabbit:listener-container></beans>

消费者代码:

package com.***.revit.mq;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.amqp.core.Message;import org.springframework.amqp.core.MessageListener;import org.springframework.stereotype.Component;/** * 功能概要:消费接收 *  * @author flyer * @since  2016年5月25日  *///@Service@Componentpublic class MessageConsumer implements MessageListener {private Logger logger = LoggerFactory.getLogger(MessageConsumer.class);@Overridepublic void onMessage(Message message) {logger.info("receive message:{}",message);System.out.println("receive message:{}"+message);}}


从bug看是构造器注入的问题 

<rabbit:template id="amqpTemplate"  connection-factory="connectionFactory"     exchange="exchangeTest"   message-converter="jsonMessageConverter" /
仔细检查这几个参数没有什么问题


代码里面触发点 是生产者注入 amqpTemplate造成

生产者代码

/**
 * 功能概要:消息产生,提交到队列中去
 * 
 * @author flyer
 * @since 2016年5月15日
 */
@Service
public class MessageProducer {


private Logger logger = LoggerFactory.getLogger(MessageProducer.class);


@Resource
private AmqpTemplate amqpTemplate;

public void sendMessage(Object message) {
logger.info("to send message:{}", message);
amqpTemplate.convertAndSend("queueTestKey", message);
}
}



一直以为是底层的问题 甚至是版本问题 User: guest
Cluster: rabbit@revit (change)
RabbitMQ 3.6.2, Erlang 18.3

maven 依赖

<!-- rabbitmq -->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>

最后折腾半天  无意屏蔽了生产者的代码  (全部屏蔽)  错误终于变了。。不容易。。

2016.05.25 23:52:53 org.springframework.web.context.ContextLoader - Context initialization failedorg.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.amqp.rabbit.core.RabbitAdmin#0': 
Unsatisfied dependency expressed through constructor argument with index 0 of type [org.springframework.amqp.rabbit.connection.ConnectionFactory]: Could not convert constructor argument value of type [org.springframework.data.redis.connection.jedis.JedisConnectionFactory] to required type [org.springframework.amqp.rabbit.connection.ConnectionFactory]: Failed to convert value of type 'org.springframework.data.redis.connection.jedis.JedisConnectionFactory' to required type 'org.springframework.amqp.rabbit.connection.ConnectionFactory'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.springframework.data.redis.connection.jedis.JedisConnectionFactory] to required type [org.springframework.amqp.rabbit.connection.ConnectionFactory]: no matching editors or conversion strategy foundat org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:727)at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1131)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1034)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762)at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)at com.bimatrix.revit.web.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:25)at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887)at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)at java.util.concurrent.FutureTask.run(Unknown Source)at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)at java.lang.Thread.run(Unknown Source)

发现redis 和rabbitmq 注入都有问题 查看redis的配置文件

       <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">          <property name="maxIdle" value="300" />        <!--   <property name="maxActive" value="${redis.maxActive}" />           <property name="maxWait" value="${redis.maxWait}" />   -->        <property name="testOnBorrow" value="true" />     </bean>          <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"          p:host-name="127.0.0.1" p:port="6379" p:password=""  p:pool-config-ref="poolConfig"/>            <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">          <property name="connectionFactory"   ref="connectionFactory" />      </bean>             <bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"    p:connection-factory-ref="connectionFactory"/>

发现redis 也有个bean 叫connectionFactory ,哎真是坑。。改了名字后 问题解决。。不再一个xml 文件里面 id bean名字 一定要 不要起的很通用的感觉



0 0
原创粉丝点击