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

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


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




对于Java从Redis缓存读取多数据源信息,并且使用多数据源来查询数据库的情况,你可以按照以下步骤进行配置和实现: 1. 导入相关依赖:首先,你需要在你的项目导入Redis和多数据源相关的依赖。比如,你可以使用Jedis作为Redis客户端,使用Spring Boot来实现多数据源配置。 2. 配置Redis连接:在你的Spring Boot配置文件配置Redis的连接信息,包括主机、端口、密码等。你可以使用Spring Boot提供的`application.properties`或`application.yml`文件进行配置。 3. 配置多数据源:在Spring Boot的配置文件配置多个数据源的连接信息。你可以使用`spring.datasource`前缀来配置主数据源,然后使用`datasource.secondary`等前缀来配置其他数据源的连接信息。 4. 创建Redis缓存管理类:创建一个缓存管理类,用于读取和写入Redis缓存。你可以使用Jedis来连接Redis,并使用其提供的方法来读取和写入数据。 5. 创建数据访问类:创建一个数据访问类,用于从数据库查询数据。通过注入不同的数据源,你可以在不同的数据源上执行查询操作。 6. 编写业务逻辑:在你的业务逻辑,首先从Redis缓存查询数据。如果数据不存在,则从数据库查询,并将查询结果保存到Redis缓存。如果数据存在于Redis缓存,则直接返回缓存的数据。 通过以上步骤,你可以实现Java从Redis缓存读取多数据源信息,并使用多数据源来查询数据库的功能。请注意,以上步骤只是提供了一个基本的框架,具体的实现方式可能因具体项目而异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值