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

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

首先建个.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 = config.getProperty(key);
            configMap.put(key, value);
        }
        //将配置写入到单例中
        DbConfig dbConfig = DbConfig.getInstance();
        dbConfig.setSysConfig(configMap);
    }

    /**
     * 读取查询配置,并写入到queryConfig中
     */
    public static void setQueryConfig(ResultSet rs) throws SQLException {
        String key = null;
        String value = null;
        Map queryConfigMap = new HashMap();
        while (rs.next()) {
            key = rs.getString("DM");
            value = rs.getString("PZZ");
            queryConfigMap.put(key, value);
            System.out.println("代码为:" + key + "对应的配置值是:" + value);
        }
        //将查询配置信息写入queryConfig
        QueryConfig queryConfig = QueryConfig.getInstance();
        //清除原有对象
        queryConfig.clearQueryConfig();
        //构造新对象
        queryConfig.setQueryConfig(queryConfigMap);
    }
}

创建测试类

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("数据库连接失败");
        }
    }
}

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

时间: 2024-10-11 20:28:39

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

可以将一些配置信息已json格式存在数据库中读取的时候序列化。

public partial class json序列化 : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            StringBuilder builder = new StringBuilder(); builder.Append("{");            builder.Append("    \"C

[转]asp.net mvc 从数据库中读取图片

本文转自:http://www.cnblogs.com/mayt/archive/2010/05/20/1740358.html 首先是创建一个类,继承于ActionResult,记住要引用System.Web.Mvc命名空间,如下: public class ImageResult : ActionResult { public ImageFormat ContentType { get; set; } public Image image { get; set; } public strin

C#从SQL server数据库中读取l图片和存入图片

原文:C#从SQL server数据库中读取l图片和存入图片 本实例主要介绍如何将图片存入数据库.将图片存入数据库,首先要在数据库中建立一张表,将存储图片的字段类型设为Image类型,用FileStream类.BinaryReader把图片读成字节的形式,赋给一个字节数组,然后用ADO.SqlCommand对象的ExecuteNonQuery()方法来把数据保存到数据库中.主要代码如下: private void button1_Click(object sender, EventArgs e)

属性器,转换从数据库中读取的状态

[DataMapping("Status", DbType.Int16)]        public System.Int16 Status { get; set; } public string StatusValue        {            get            {                if (Status == 0)                {                    return "审核拒绝";    

“在 setroubleshoot 服务中读取信息时出错:没有那个文件或目录” 的解决办法

在学习鸟哥的LINUX私房菜(基础篇)第17.5.5 SELinux所需的服务 章节中 鸟哥提到: [[email protected] ~]# chkconfig --list setroubleshoot setroubleshoot 0:off 1:off 2:off 3:on 4:on 5:on 6:off # 我们癿 Linux 运作模式是在 3 戒 5 号,因此这两个要 on 卲可. 我的虚拟机为CentOS5.11, 但是我在测试的时候,出现如下信息: [[email protec

获取Oracle数据库中字段信息

select t.DATA_PRECISION,t.DATA_SCALE,t.DATA_LENGTH,t.DATA_TYPE,t.COLUMN_NAME, t.NULLABLE,t.DATA_DEFAULT,c.COMMENTS from all_tab_columns t left join all_col_comments c on t.table_name = c.table_name and t.column_name = c.column_name where t.table_name

分页(将数据库中的信息分页显示到网页)

问题分析: 当我们想检索数据库中的信息并将其显示到网页上时,如果数据库中的信息过多时 .一方面会使数据库开销非常大,降低性能:另一方面在一张页面上显示过多数据也会降低用户体验. 解决办法: 1.由于在分页之后每一页显示的信息不再仅仅是数据空中的数据而是类似于下图: 所以我们需要创建一个page类: package com.neuedu.manage.bean; import java.util.List; public class page <T>{ private List<T>

C#:使用OleDb从Excel表格中读取信息到DataTable

从Excel表格中将数据读入到DataTable数据类型中,我是通过使用OLEDB来实现的 (OLEDB是Object Linking and Embedding Database的缩写) 现有一个扩展名为xlsx的工作簿文件"节气表.xlsx",在工作表Sheet1中有24个节气的信息 本文中的示例程序(代码将在后面给出)读取这个数据表后的效果如下图: 可以看出:OleDb读入一个Excel工作表(Sheet)的数据后,工作表的第一行会变成标题,第二行起,逐行变为DataTable的

php将图片保存到mysql数据库及从数据库中读取图片的方法源码 转

php将图片保存到mysql数据库及从数据库中读取图片的方法源码 分类: 网站 2012-03-11 15:25 5059人阅读 评论(0) 收藏 举报 数据库mysqlphpsql serverquerydatabase 一般来讲都是把图片保存到服务器下,然后根据路径读出的,但是有时候出于安全及版权什么的考虑,会把图片保存到mysql的数据库中,然后再读出来,这样的图片点击右键属性,是看不到图片地址的.下面逍遥一生就介绍下如何用php把图片存储到mysql中及如何读出.     MySQL数据