首页 > 代码库 > 从配置文件或数据库中读取信息并缓存

从配置文件或数据库中读取信息并缓存

在项目中将一些常用的不变的信息可以缓存起来,这样可以减少内存的使用率,提高性能。比如说就数据库连接的相关信息等,可以用单例模式第一次进行连接的时候将数据库连接的相关信息缓存再单例对象中。


首先建个.properties文件,存放数据库连接信息,内容如下:

#数据库配置
driver_class = oracle.jdbc.driver.OracleDriver
url= jdbc:oracle:thin:@192.168.20.188:1521:orcl
username = qwszpt
password = rxqwszpt

创建两个单例类,一个用于缓存数据库连接信息,一个用于缓存查询的结果集。

package wbb.java.GetConfiguration.singleton;

import java.util.Map;

/**
 * User: wbb
 * Date: 14-8-11
 * Time: 上午11:12
 * 缓存数据库连接信息的单例
 */
public class DbConfig {
    private Map<String,String> sysConfig;
    private static DbConfig instance = null;

    public static synchronized DbConfig getInstance()
    {
        if (instance == null)
        {
            instance = new DbConfig();
        }
        return instance;
    }

    //清楚对象中缓存的内容
    public void clearSysConfig() {
        sysConfig = null;
    }

    public Map<String, String> getSysConfig() {
        return sysConfig;
    }

    public void setSysConfig(Map<String, String> sysConfig) {
        this.sysConfig = sysConfig;
    }
}

package wbb.java.GetConfiguration.singleton;

import java.util.Map;

/**
 * User: wbb
 * Date: 14-8-11
 * Time: 上午11:25
 * 缓存查询信息的单例
 */
public class QueryConfig {
    private Map<String, String> queryConfig;
    private static QueryConfig instance = null;

    public static synchronized QueryConfig getInstance() {
        if(instance == null) {
            instance = new QueryConfig();
        }
        return instance;
    }

    //清楚对象中缓存的内容
    public void clearQueryConfig() {
        queryConfig = null;
    }

    public Map<String, String> getQueryConfig() {
        return queryConfig;
    }

    public void setQueryConfig(Map<String, String> queryConfig) {
        this.queryConfig = queryConfig;
    }
}

创建一个读取或写入系统配置文件的工具类。

package wbb.java.GetConfiguration.utils;

import wbb.java.GetConfiguration.singleton.DbConfig;
import wbb.java.GetConfiguration.singleton.QueryConfig;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.*;

/**
 * Created with IntelliJ IDEA.
 * User: wbb
 * Date: 14-8-11
 * Time: 上午11:05
 * 读取或写入系统配置文件的工具类
 */
public class SystemConfigUtil {
    /**
     * 从配置文件中读取配置信息
     *
     * @return 配置信息properties
     * @throws IOException
     */
    public static Properties getProperties() throws IOException {
        Properties prop = new Properties();
        InputStream in = Object.class.getResourceAsStream("/config.properties");
        prop.load(in);
        return prop;
    }

    /**
     * 将数据库配置信息写入到dbConfig中
     *
     * @param config 数据库配置信息
     */
    public static void setDBConfig(Properties config) {
        Map<String, String> configMap = new HashMap<String, String>();
        //迭代配置文件中的配置,并放到map中
        for (Enumeration e = config.propertyNames(); e.hasMoreElements(); ) {
            String key = (String) e.nextElement();
            String value = http://www.mamicode.com/config.getProperty(key);>
创建测试类

package wbb.java.GetConfiguration;

import wbb.java.GetConfiguration.singleton.DbConfig;
import wbb.java.GetConfiguration.utils.SystemConfigUtil;

import java.io.IOException;
import java.sql.*;
import java.util.Map;
import java.util.Properties;

/**
 * User: wbb
 * Date: 14-8-11
 * Time: 上午11:03
 * 测试从配置文件中读取
 */
public class GetConfigurationFromProperties {
    public static void main(String[] args) {
        Properties properties = null;
        /**
         * 从配置文件中读取配置信息,并缓存到DbConfig单例对象中
         */
        try {
            //读取配置文件
            properties = SystemConfigUtil.getProperties();
            //将数据库配置写入(缓存)到dbconfig
            SystemConfigUtil.setDBConfig(properties);
            //获取数据库连接信息的实例
            Map<String, String> dbConfig = DbConfig.getInstance().getSysConfig();

            /**
             * 从数据库中读取信息并缓存到QueryConfig单例对象中
             */

            //连接数据库
            Connection conn = null;
            Class.forName(dbConfig.get("driver_class"));
            conn = DriverManager.getConnection(dbConfig.get("url"), dbConfig.get("username"), dbConfig.get("password"));

            //获取执行sql语句的对象
            Statement stmt =null;
            stmt = conn.createStatement();

            //执行sql语句,获取结果集
            ResultSet rs=null;
            rs=stmt.executeQuery("select * from t_pz_xtpz");

            //将查询信息写入(缓存)到queryconfig
            SystemConfigUtil.setQueryConfig(rs);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("读取配置文件失败");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("没有找到驱动文件");
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("数据库连接失败");
        }
    }
}