优化spring+rabbitmq配置时的问题记录

来源:互联网 发布:医生在线回答软件 编辑:程序博客网 时间:2024/05/18 10:48

这两天刚写了spring整合rabbitmq监听mq的消费端代码。但是看wiki上大牛说:“凡是在程序中指定(Hard Coding-硬编码)所链接的Hostname或者IP以及用户密码的,只能是入门学习或者测试用途,上生产时的正规用法肯定是读取配置文件。。。。。。”所以我改成用properties文件引入。按照网上一套下来,发现启动报错:java.lang.IllegelArgumentException: could not resolve placeholder ‘rabbitmq_username’ in string value “${rabbitmq_username}”……

按照正常的网上说的配置方法。先写好rabbitmq.properties配置文件,注掉的是原来的配置:

rabbitmq.host=10.137.100.64rabbitmq.username=ZH.TRACErabbitmq.password=ZH.TRACErabbitmq.port=5672rabbitmq.vhost=vhost

然后修改content-rabbitmq.xml配置文件:

<context:property-placeholder location="classpath:rabbitmq.properties"/>            <!-- 定义RabbitMQ的连接工厂 -->  <bean id="connectionFactory" class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">        <constructor-arg value="${rabbitmq.host}"/><!--服务器ip地址-->          <property name="username" value="${rabbitmq.username}"/>        <property name="password" value="${rabbitmq.password}"/>        <property name="port" value="${rabbitmq.port}"/>        <property name="virtualHost" value="${rabbitmq.vhost}"/>        <property name="channelCacheSize" value="50"/>    </bean><!--    <bean id="connectionFactory" class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory"> --><!--        <constructor-arg value="10.137.100.64"/>服务器ip地址   --><!--        <property name="username" value="ZH.TRACE"/> --><!--        <property name="password" value="ZH.TRACE"/> --><!--        <property name="port" value="5672"/> --><!--        <property name="virtualHost" value="vhost"/> --><!--        <property name="channelCacheSize" value="50"/> --><!--    </bean> -->

然后启动报错了。

原因分析:

由于项目本身已经在文件content-biz.mxl配置数据源的时候已经用了引入资源文件的方法。这里我又在content-rabbitmq.xml文件中使用:
这个引入资源的标签导致报错。没错,spring配置中的引入资源文件的标签 #placeholder# 只能出现一次,再出现就没啥作用了。

这是content-biz.xml中引入资源文件的部分代码:

<bean name="propertyConfiger" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">    <property name="ignoreResourceNotFound" value="true"/>    <property name="locations">        <list>            <value>classpath:META-INF/app_config/init_config.properties</value>        </list>    </property>

所以,我们可以把content-rabbitmq.xml中的 删除,【配置文件都在同一个目录下】然后在content-biz.mxl中的这个标签中加上
classpath:META-INF/app_config/rabbitmq.properties,启动就可以了。

原创粉丝点击