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

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

02a76ecf34cf5edf30c7c4362a1e5dee.png

首先建个.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 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 getSysConfig() {

return sysConfig;

}

public void setSysConfig(Map 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 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 getQueryConfig() {

return queryConfig;

}

public void setQueryConfig(Map 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 configMap = new HashMap();

//迭代配置文件中的配置,并放到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 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("数据库连接失败");

}

}

}

2a80867d0616c2c6511ace631307df80.png

0818b9ca8b590ca3270a3433284dd417.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值