1. 程式人生 > >優化spring+rabbitmq配置時的問題記錄

優化spring+rabbitmq配置時的問題記錄

這兩天剛寫了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.64
rabbitmq.username=ZH.TRACE
rabbitmq.password=ZH.TRACE
rabbitmq.port=5672
rabbitmq.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,啟動就可以了。