Jakarta Commons的configuration包读取配置文件
配置文件一般常见的有两种:键值对格式,或XML配置文件,读取这类配置文件可以用Commons Configuration包。
键值对格式也就是常见的.properties文件。通过PropertiesConfiguration读取,如下:
代码如下 | 复制代码 |
package com.guoweiwei.test.configuration; import java.util.List; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; public class PropertiesReadExample { /** * @param args * @throws ConfigurationException */ public static void main(String[] args) throws ConfigurationException { Configuration config = new PropertiesConfiguration(“com/guoweiwei/test/configuration/test.properties”); float speed = config.getFloat(“speed”); List names = config.getList(“names”); boolean correct = config.getBoolean(“correct”); System.out.println(“speed:” + speed); System.out.println(“names:” + names.size()); System.out.println(“correct:” + correct); } } |
当然对XML文件的读取和解析也是如此简单:
代码如下 | 复制代码 |
package com.guoweiwei.test.configuration;import java.util.List; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.XMLConfiguration; public class XMLReadExample { private static final String RESOURCE_FILE = “com/guoweiwei/test/configuration/test.xml”; /** * @param args * @throws ConfigurationException */ public static void main(String[] args) throws ConfigurationException { Configuration config = new XMLConfiguration(RESOURCE_FILE); List startCriteria = config.getList(“start-criteria.criteria”); String firstCriteria = config.getString(“start-criteria.criteria(0)”); String firstCriteriaType = config.getString(“start-criteria.criteria(0)[@type]“); int horsepower = config.getInt(“horsepower”); System.out.println(“startCriteria:” + startCriteria.size()); System.out.println(“firstCriteria:” + firstCriteria); System.out.println(“firstCriteriaType:” + firstCriteriaType); System.out.println(“horsepower:” + horsepower); } } |
从上面的代码可以看出,XMLConfiguration的getXXX()方法还支持XPath解析XML文件。
此外,可以综合使用XML和属性文件读取配置文件,比如一种常见的场景:
应用程序的配置有多个不同的地方。首先是一个全局配置;然后某个地方可能需要局部配置,当两者重复时以局部配置为准,然后还有一个用户自定义的配置文件,用户自定义的配置文件优先级又高于局部配置和全局配置。这个时候就可以考虑用一个ConfigurationFactory来管理了,将三个不同的配置文件分别定义为global.properties、local.properties、user.properties,然后通过一个configuration.xml的文件来管理三者之间的优先级关系,如下所示:
属性配置文件之一global.properties
threads.max=50threas.min=2
timout=15.52
interactive=true
color=red
speed=50
name=Default User
属性配置文件之二local.properties
threads.max=30speed=55
属性配置文件之三user.properties
threads.min=1color=black
speed=5000
name=Sean
管理这三个属性配置文件的配置文件configuration.xml
代码如下 | 复制代码 |
<?xml version=“1.0″ encoding=“UTF-8″?><configuration> <properties fileName=“user.properties”/> <properties fileName=“local.properties”/> <properties fileName=“global.properties”/> </configuration> |
然后,应用程序中可以这样使用:
代码如下 | 复制代码 |
package com.guoweiwei.test.configuration;import java.net.MalformedURLException; import java.net.URL; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.ConfigurationFactory; public class ComplexConfigExample { private static final String RESOURCE_FILE = “com/guoweiwei/test/configuration/complex/configuration.xml”; /** * @param args * @throws ConfigurationException * @throws MalformedURLException */ public static void main(String[] args) throws ConfigurationException, MalformedURLException { ComplexConfigExample c = new ComplexConfigExample(); c.ReadComplexConfiguration(); } private void ReadComplexConfiguration() throws ConfigurationException{ ConfigurationFactory factory = new ConfigurationFactory(); //URL url = this.getClass().getResource(RESOURCE_FILE); URL url = this.getClass().getResource(“complex/configuration.xml”); factory.setConfigurationURL(url); Configuration config = factory.getConfiguration(); System.out.println(“Timeout:”+config.getFloat(“timout”)); System.out.println(“Max Thread:”+config.getInt(“threads.max”)); System.out.println(“Name:”+config.getString(“name”)); System.out.println(“Speed:”+config.getInt(“speed”)); } } |
最后的输出结果如下:
Timeout:15.52 【来自于global.properties】Max Thread:30 【来自于local.properties】
Name:Sean 【来自于user.properties】
Speed:5000 【来自于user.properties】
spring读取配置文件
一.读取xml配置文件
(一)新建一个java bean(HelloBean.java)
java 代码
代码如下 | 复制代码 |
package chb.demo.vo; public class HelloBean { private String helloWorld; public String getHelloWorld() { return helloWorld; } public void setHelloWorld(String helloWorld) { this.helloWorld = helloWorld; } } |
(二)构造一个配置文件(beanConfig.xml)
xml 代码
代码如下 | 复制代码 |
<!---->xml version="1.0" encoding="UTF-8"?> <!---->> <beans> <bean id="helloBean" class="chb.demo.vo.HelloBean"> <property name="helloWorld"> <value>Hello!chb!value> property> bean> beans>
|
(三)读取xml文件
1.利用ClassPathXmlApplicationContext
java 代码
代码如下 | 复制代码 |
ApplicationContext context = new ClassPathXmlApplicationContext("beanConfig.xml"); HelloBean helloBean = (HelloBean)context.getBean("helloBean"); System.out.println(helloBean.getHelloWorld()); |
2.利用FileSystemResource读取
java 代码
代码如下 | 复制代码 |
Resource rs = new FileSystemResource("D:/software/tomcat/webapps/springWebDemo/WEB-INF/classes/beanConfig.xml"); BeanFactory factory = new XmlBeanFactory(rs); HelloBean helloBean = (HelloBean)factory.getBean("helloBean"); System.out.println(helloBean.getHelloWorld()); |
值得注意的是:利用FileSystemResource,则配置文件必须放在project直接目录下,或者写明绝对路径,否则就会抛出找不到文件的异常
二.读取properties配置文件
这里介绍两种技术:利用spring读取properties 文件和利用java.util.Properties读取
(一)利用spring读取properties 文件
我们还利用上面的HelloBean.java文件,构造如下beanConfig.properties文件:
properties 代码
代码如下 | 复制代码 |
helloBean.class=chb.demo.vo.HelloBean helloBean.helloWorld=Hello!chb! |
属性文件中的"helloBean"名称即是Bean的别名设定,.class用于指定类来源。
然后利用org.springframework.beans.factory.support.PropertiesBeanDefinitionReader来读取属性文件
java 代码
代码如下 | 复制代码 |
BeanDefinitionRegistry reg = new DefaultListableBeanFactory(); PropertiesBeanDefinitionReader reader = new PropertiesBeanDefinitionReader(reg); reader.loadBeanDefinitions(new ClassPathResource("beanConfig.properties")); BeanFactory factory = (BeanFactory)reg; HelloBean helloBean = (HelloBean)factory.getBean("helloBean"); System.out.println(helloBean.getHelloWorld()); |
(二)利用java.util.Properties读取属性文件
比如,我们构造一个ipConfig.properties来保存服务器ip地址和端口,如:
properties 代码
ip=192.168.0.1
port=8080
则,我们可以用如下程序来获得服务器配置信息:
java 代码
代码如下 | 复制代码 |
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ipConfig.properties"); Properties p = new Properties(); try { p.load(inputStream); } catch (IOException e1) { e1.printStackTrace(); } System.out.println("ip:"+p.getProperty("ip")+",port:"+p.getProperty("port")); |
本文只介绍了一些简单操作,不当之处希望大家多多指教