優化spring+rabbitmq配置時的問題記錄
阿新 • • 發佈:2019-01-08
這兩天剛寫了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,啟動就可以了。