项目中一定会有不少常量、配置信息放在属性文件中更为合适。通过一定的方法配置,我们便可以在项目全局读取使用,甚为方便。我们以一个标准的maven项目为例,简要说明。
一、resources下存放属性文件,我们以简单的数据库连接信息为例,如 jdpc.properties
文件里的内容,就是简单的属性值:
db.user=root
db.pass=root
db.host=jdbc:mysql://10.121.32.133:3306/test?characterEncoding=UTF-8
二、我们需要一个工具类来读取这个属性文件里的各个属性值。作为一个工具类,没有必要多个实例对象的存在,因此单例。
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.DefaultConfigurationBuilder;
import java.util.List;
public class ConfigurationUtil {
private static Configuration config;
private static ConfigurationUtil configurationUtil = null;
private ConfigurationUtil() {
}
//属性文件中是否包含某个key
public static boolean containsKey(String key) {
return config.containsKey(key);
}
//属性文件中某个kdy的值是否为空
public static boolean isEmpty() {
return config.isEmpty();
}
//获取整型属性
public static int getInt(String key) {
return config.getInt(key);
}
//获取列表属性
public static List getList(String key) {
return config.getList(key);
}
//获取字符串属性
public static String getString(String key) {
return config.getString(key);
}
//单例
public static ConfigurationUtil getInstance() {
if (configurationUtil == null) {
configurationUtil = new ConfigurationUtil();
}
return configurationUtil;
}
//初始化全局属性
public synchronized void initConfig(String configFile) {
if (ConfigurationUtil.config == null) {
try {
DefaultConfigurationBuilder e = new DefaultConfigurationBuilder(configFile);
ConfigurationUtil.config = e.getConfiguration();
} catch (ConfigurationException e) {
e.printStackTrace();
}
}
}
}
三、这个工具类必须要在我们使用前就时刻准备着,因此需要在项目启动时完成初始化。我们使用一个Listener来完成这个工作
1、web.xml 文件中添加以下内容:
<listener>
<listener-class>com.lyj.profiles.ConfigurationListener</listener-class>
</listener>
2、ConfigurationListener 类的代码如下
import org.springframework.util.ResourceUtils;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.io.File;
/**
* 用于初始化配置文件
*/
public class ConfigurationListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
try {
File file = ResourceUtils.getFile("classpath:configuration.xml");
ConfigurationUtil.getInstance().initConfig(file.getAbsolutePath());
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
}
}
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
3、初始化类需要配合一个简单的配置文件 configuration.xml
将需要读取的所有属性文件列出,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<header>
<result forceReloadCheck="true"></result>
</header>
<override>
<system/>
<!-- 加载Properties文件 -->
<properties fileName="jdbc.properties"/>
</override>
</configuration>
至此,配置完成。
四、测试使用
1、项目编译运行时,通过ConfigurationListener 对工具类进行初始化,单元测试时也可以像这样手动初始化:
ConfigurationUtil.getInstance().initConfig("configuration.xml");
2、初始化之后的使用就很简单了
以读取配置文件中的数据库用户名密码为例:
String dbUser = ConfigurationUtil.getString("db.user");
String dbPass = ConfigurationUtil.getString("db.pass");
我们的工具类也给出了获取整型、列表等数据的方法。其他比如长整型、布尔型等属性值的读取写法类似,大家根据业务需要自己编写就好了!