[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里了。

<?xml version="1.0" encoding="UTF-8"?>



<mule xmlns:scripting="http://www.mulesoft.org/schema/mule/scripting" 

      xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" 

      xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 

      xmlns:context="http://www.springframework.org/schema/context"

      xmlns:spring="http://www.springframework.org/schema/beans" 

      version="CE-3.3.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="

http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 

http://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd 

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 

http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd ">

    

    <context:property-placeholder location="classpath:test.properties"></context:property-placeholder>

    

    <flow name="mule-maven-testFlow1" doc:name="mule-maven-testFlow1">

        <http:inbound-endpoint exchange-pattern="request-response" address="http://${address}" doc:name="HTTP"/>

        <logger message="#[groovy:message.toString()]" level="INFO" doc:name="Logger Message"/>

        <scripting:component doc:name="Groovy">

            <scripting:script engine="Groovy" file="scripts/build-response.groovy"/>

        </scripting:component>

    </flow>

</mule>

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

 

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 静态类来实现读取。

package com.neusoft.fx;



import java.io.IOException;

import java.io.InputStream;

import java.util.Properties;



public class PropertyUtils {

	

	private static Properties properties;

	

	public void init() {

		ClassLoader loader = Thread.currentThread().getContextClassLoader();

		InputStream resourceAsStream = loader.getResourceAsStream("message.properties");

		properties = new Properties();

		try {

			properties.load(resourceAsStream);

		} catch (IOException e) {

			e.printStackTrace();

		}

	}

	

	public static String get(String key) {

		return (String)properties.get(key);

	}

}

mule 的配置:

<?xml version="1.0" encoding="UTF-8"?>



<mule xmlns:scripting="http://www.mulesoft.org/schema/mule/scripting" 

      xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" 

      xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 

      xmlns:context="http://www.springframework.org/schema/context"

      xmlns:spring="http://www.springframework.org/schema/beans" 

      version="CE-3.3.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="

http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 

http://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd 

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 

http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd ">

    <context:property-placeholder location="classpath:test.properties"></context:property-placeholder>

    <spring:beans>

    	<spring:bean id="propertyUtils" init-method="init" scope="singleton" class="com.neusoft.fx.PropertyUtils" name="Bean"/>

    </spring:beans>

    <flow name="mule-maven-testFlow1" doc:name="mule-maven-testFlow1">

        <http:inbound-endpoint exchange-pattern="request-response" address="http://${address}" doc:name="HTTP"/>

        <logger message="#[groovy:message.toString()]" level="INFO" doc:name="Logger Message"/>

        <scripting:component doc:name="Groovy">

            <scripting:script engine="Groovy" file="scripts/build-response.groovy"/>

        </scripting:component>

        <logger message="#[groovy:message.toString()]" level="INFO" doc:name="Logger Message"/>

    </flow>

</mule>

在 groovy 中也可以直接使用:

import com.neusoft.fx.*;



def contentType = message.getInboundProperty("Content-Type");

def response = "";

if (contentType == "application/xml") {

	response = PropertyUtils.get("response.xml");

} else {

	response = PropertyUtils.get("response.json");

}



response


三. log4j

 

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

 

# Default log level

log4j.rootCategory=INFO,console



log4j.appender.console=org.apache.log4j.ConsoleAppender

log4j.appender.console.layout=org.apache.log4j.PatternLayout

log4j.appender.console.layout.ConversionPattern=%-5p %d [%t] %c: %m%n



#log4j.appender.INFO=org.apache.log4j.ConsoleAppender

#log4j.appender.INFO.layout=org.apache.log4j.PatternLayout

#log4j.appender.INFO.layout.ConversionPattern=%-5p %d [%t] %c: %m%n



################################################

# You can set custom log levels per-package here

################################################



# CXF is used heavily by Mule for web services

log4j.logger.org.apache.cxf=WARN



# Apache Commons tend to make a lot of noise which can clutter the log.

log4j.logger.org.apache=WARN



# Reduce startup noise

log4j.logger.org.springframework.beans.factory=WARN



# Mule classes

log4j.logger.org.mule=INFO



# Your custom classes

log4j.logger.com.taiping.esb=INFO

 

 

 


你可能感兴趣的:(properties)