SOA Mule ESB 3.x 入门配置(spring, properties, log4j)

Mule 中很好的结合了spring,在 Mule 3.x 中将 spring 3.x 作为核心组件,可以开箱即用,和一般J2EE应用开发无异。下面介绍一下:

一.  属性占位(property-placeholder)

Mule 利用 spring context:property-placeholder 就能实现属性替换。比如:下面的 ${address} 通过 test.properties 里的 address 属性替换。
将来开发有数据库操作的时候,就可以把数据库相关配置放在jdbc.properties里了。

[html][/html] view plaincopy

  1. <?xml version=”1.0″ encoding=”UTF-8″?>
  2. <mule xmlns:scripting=”http://www.mulesoft.org/schema/mule/scripting”
  3.       xmlns:http=”http://www.mulesoft.org/schema/mule/http” xmlns=”http://www.mulesoft.org/schema/mule/core”
  4.       xmlns:doc=”http://www.mulesoft.org/schema/mule/documentation”
  5.       xmlns:context=”http://www.springframework.org/schema/context”
  6.       xmlns:spring=”http://www.springframework.org/schema/beans”
  7.       version=”CE-3.3.1″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”
  8. http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
  9. http://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd
  10. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
  11. http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd “>
  12.     <context:property-placeholder location=”classpath:test.properties”></context:property-placeholder>
  13.     <flow name=”mule-maven-testFlow1″ doc:name=”mule-maven-testFlow1″>
  14.         <http:inbound-endpoint exchange-pattern=”request-response” address=”http://${address}” doc:name=”HTTP”/>
  15.         <logger message=”#[groovy language=”:message.toString()”][/groovy]” level=”INFO” doc:name=”Logger Message”/>
  16.         <scripting:component doc:name=”Groovy”>
  17.             <scripting:script engine=”Groovy” file=”scripts/build-response.groovy”/>
  18.         </scripting:component>
  19.     </flow>
  20. </mule>

注意:新创建的 xxx.mflow 中并没有 xmlns:context 要用 context:property-placeholder 必须加上:

 

[html][/html] view plaincopy

  1. xmlns:context=”http://www.springframework.org/schema/context”

 

因为 Mule 工程遵从 maven 规范,所以 test.properties 直接放在 src/main/resources 下即可。(还可以放在 src/main/app 下)

二. 读取 properties 
类似的,将某个properties放在 src/main/resources 下,就可以通过 spring 配置来读取它。因此我们实现一个 PropertyUtils 静态类来实现读取。

[java][/java] view plaincopy

  1. package com.neusoft.fx;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.util.Properties;
  5. public class PropertyUtils {
  6.     private static Properties properties;
  7.     public void init() {
  8.         ClassLoader loader = Thread.currentThread().getContextClassLoader();
  9.         InputStream resourceAsStream = loader.getResourceAsStream(“message.properties”);
  10.         properties = new Properties();
  11.         try {
  12.             properties.load(resourceAsStream);
  13.         } catch (IOException e) {
  14.             e.printStackTrace();
  15.         }
  16.     }
  17.     public static String get(String key) {
  18.         return (String)properties.get(key);
  19.     }
  20. }

mule 的配置:

[html][/html] view plaincopy

  1. <?xml version=”1.0″ encoding=”UTF-8″?>
  2. <mule xmlns:scripting=”http://www.mulesoft.org/schema/mule/scripting”
  3.       xmlns:http=”http://www.mulesoft.org/schema/mule/http” xmlns=”http://www.mulesoft.org/schema/mule/core”
  4.       xmlns:doc=”http://www.mulesoft.org/schema/mule/documentation”
  5.       xmlns:context=”http://www.springframework.org/schema/context”
  6.       xmlns:spring=”http://www.springframework.org/schema/beans”
  7.       version=”CE-3.3.1″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”
  8. http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
  9. http://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd
  10. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
  11. http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd “>
  12.     <context:property-placeholder location=”classpath:test.properties”></context:property-placeholder>
  13.     <spring:beans>
  14.         <spring:bean id=”propertyUtils” init-method=”init” scope=”singleton” class=”com.neusoft.fx.PropertyUtils” name=”Bean”/>
  15.     </spring:beans>
  16.     <flow name=”mule-maven-testFlow1″ doc:name=”mule-maven-testFlow1″>
  17.         <http:inbound-endpoint exchange-pattern=”request-response” address=”http://${address}” doc:name=”HTTP”/>
  18.         <logger message=”#[groovy language=”:message.toString()”][/groovy]” level=”INFO” doc:name=”Logger Message”/>
  19.         <scripting:component doc:name=”Groovy”>
  20.             <scripting:script engine=”Groovy” file=”scripts/build-response.groovy”/>
  21.         </scripting:component>
  22.         <logger message=”#[groovy language=”:message.toString()”][/groovy]” level=”INFO” doc:name=”Logger Message”/>
  23.     </flow>
  24. </mule>

在 groovy 中也可以直接使用:

[java][/java] view plaincopy

  1. import com.neusoft.fx.*;
  2. def contentType = message.getInboundProperty(“Content-Type”);
  3. def response = “”;
  4. if (contentType == “application/xml”) {
  5.     response = PropertyUtils.get(“response.xml”);
  6. } else {
  7.     response = PropertyUtils.get(“response.json”);
  8. }
  9. response

三. log4j

 

通过 Mule IDE 创建的 mule 工程中并没有log4j的配置文件,直接拷贝一份到 src/main/resources 下即可实现对 mule 应用的log配置。
例:

 

[plain][/plain] view plaincopy

  1. # Default log level
  2. log4j.rootCategory=INFO,console
  3. log4j.appender.console=org.apache.log4j.ConsoleAppender
  4. log4j.appender.console.layout=org.apache.log4j.PatternLayout
  5. log4j.appender.console.layout.ConversionPattern=%-5p %d [%t] %c: %m%n
  6. #log4j.appender.INFO=org.apache.log4j.ConsoleAppender
  7. #log4j.appender.INFO.layout=org.apache.log4j.PatternLayout
  8. #log4j.appender.INFO.layout.ConversionPattern=%-5p %d [%t] %c: %m%n
  9. ################################################
  10. # You can set custom log levels per-package here
  11. ################################################
  12. # CXF is used heavily by Mule for web services
  13. log4j.logger.org.apache.cxf=WARN
  14. # Apache Commons tend to make a lot of noise which can clutter the log.
  15. log4j.logger.org.apache=WARN
  16. # Reduce startup noise
  17. log4j.logger.org.springframework.beans.factory=WARN
  18. # Mule classes
  19. log4j.logger.org.mule=INFO
  20. # Your custom classes
  21. log4j.logger.com.taiping.esb=INFO

标签