谈Java Properties配置文件, 是J2EE容器的命令行绑定, 还是使用Deploy自适应的绑定?
2008-03-30 16:19
651 查看
这里暂且把XML格式放在一边吧,我们来看看Java使用的最多的.properties配置文件...
今天,看到好几个J2EE的应用发布到服务器上的时候,都要在J2EE Container启动的时候,在启动的脚本上面添加启动的参数:
这样一来,每每有新的应用需要发布到J2EE Applicaion Server的时候,又要来修改启动脚本,并作停机和重新启动的动作...给生产带来了很大的不便...
反过来看看目前流行的做法,比如说log4j、hibernate等等都有一个很好的解决办法,就是把对应的配置文件(某个.properties的文档),放在应用的classes目录下,相关的程序会自己去读取...
看了一下,其实就是利用ClassLoader.getSystemResourceAsStream()来实现的,因为对于某一个应用,所有Class的装载,都是由一系列存在父子关系的ClassLoader来完成的...通过上面这个方法,会递归查找所需要的properties文件...作了一个代码如下:
这样,就可以直接修改.properties文件,就可以生效了,不用重开服务器!而且,多个应用之间的配置都是隔离开的,每个配置文件都是随着自己所在的WAR绑定的!对 one AP Server <--> multi Applications 再好不过了!
自己给这个起了个名字,叫做“自适应配置文件读取”!
今天,看到好几个J2EE的应用发布到服务器上的时候,都要在J2EE Container启动的时候,在启动的脚本上面添加启动的参数:
-DSystemAConfigFile="XXXXX" -DSystemBConfigFile="YYYYY" -DSystemCConfigFile="ZZZZZ" |
反过来看看目前流行的做法,比如说log4j、hibernate等等都有一个很好的解决办法,就是把对应的配置文件(某个.properties的文档),放在应用的classes目录下,相关的程序会自己去读取...
看了一下,其实就是利用ClassLoader.getSystemResourceAsStream()来实现的,因为对于某一个应用,所有Class的装载,都是由一系列存在父子关系的ClassLoader来完成的...通过上面这个方法,会递归查找所需要的properties文件...作了一个代码如下:
package net.csdn.blog.xport; import java.io.InputStream; import java.util.Properties; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; public class Configure { [b] private[/b] static final Logger logger = LogManager.getLogger(Configure.class); [b] private[/b] String propertiesFileName; [b] private[/b] Properties propertiesTable; [b] public[/b] Configure() { [b] this[/b].loadPropertiesTable(); [b] }[/b] [b] public[/b] Configure(String propertiesFileName) { [b] [b] [/b]this[/b].setPropertiesFileName(propertiesFileName); [b][b] [/b]this[/b].loadPropertiesTable(); [b] }[/b] [b] public[/b] String getPropertiesFileName() { [b][b] [/b]return[/b] this.propertiesFileName; [b] }[/b] [b] public[/b] void setPropertiesFileName(String propertiesFileName) { [b] [b] [/b]this[/b].propertiesFileName = propertiesFileName; [b] }[/b] [b] private[/b] void loadPropertiesTable() { [b] [/b]propertiesTable = new Properties(); [b] [b] [/b]if[/b] (this.propertiesFileName != null && this.propertiesFileName != "") { [b][b] [b] [/b] [/b]try[/b] { /* * 2005/11/14, 同事发现了此处存在Bug,只能在Console模式下运行,如果是在Web方式下 * 存在Bug...原因是此处使用了ClassLoader类别读取Resource,丢失了层级关系! [b] [b] [/b] [/b] * InputStream in = [b] [b] [/b] [/b] * ClassLoader.getSystemResourceAsStream(this.propertiesFileName); [b] [b] [/b] [/b] * propertiesTable.load(in); */ ClassLoader classLoader = Configure.class.getClassLoader(); URL resUrl = classLoader.getResource(this.propertiesFileName); /* * 虽然拿到了URL, 不好用new FileInputStream(URL.toString())来操作,因为在Windows * 和*NIX上面,对file:///协议的表示是不兼容的。java.net.URL会把Windows上面的文件 * 地址解释为file:/D:/xxx/,这样就错了,正确的应该是file:///D:/xxx ! * * 所以,既然有了URL对象,就可以直接openStream了! */ InputStream in = resUrl.openStream(); propertiesTable.load(in); [b][b] [b] [/b] [/b]}[/b] [b][b] [b] [/b] [/b]catch[/b] (Exception ex) { [b] [/b] logger.debug(ex.getMessage(), ex); [b] [/b] logger.info("can not load properties file:" + this.propertiesFileName); [b][b] [b] [/b] [/b]}[/b] [b] [b] [/b]}[/b] [b] }[/b] [b] public[/b] String getProperty(String propertyName) { [b] [b] [/b]return[/b] this.propertiesTable.getProperty(propertyName); [b] }[/b] } |
自己给这个起了个名字,叫做“自适应配置文件读取”!
相关文章推荐
- 谈Java Properties配置文件, 是J2EE容器的命令行绑定, 还是使用Deploy自适应的绑定?
- 谈Java Properties配置文件, 是J2EE容器的命令行绑定, 还是使用Deploy自适应的绑定?
- 谈Java Properties配置文件, 是J2EE容器的命令行绑定, 还是使用Deploy自适应的绑定?
- JavaI/O:使用Properties来解析配置文件
- 问题:使用java中properties加载配置文件
- Java中封装配置文件(1)-使用Properties (转)
- java读取配置文件(使用java.util.Properties读取)
- Java中封装配置文件(1)-使用Properties
- java中配置文件.properties的使用
- web工程中普通 java 类使用 properties 配置文件中属性
- Java —— 通过Properties 与 FileInputStream 类使用ini配置文件
- Java中封装配置文件(1)-使用Properties
- 关于Java配置文件properties的使用(简单易用版)
- java工程使用log4j和properties文件详细配置
- java中的配置文件(Properties)的使用
- java 通过 Properties 读取数据库配置 .properties 文件的使用。
- 在工厂模式中使用Properties配置文件出现java.lang.ExceptionInInitializerError的问题
- 使用Properties配置文件 InputStream与FileReader (java)
- 使用java.util.Properties读取配置文件信息
- java中配置文件 .properties使用