读取propery文件

http://www.iteye.com/topic/380854

1.读取配置文件

 

EnvironmentConfig.java

Java代码 复制代码
  1. package com.billows.util;   
  2.   
  3. import java.io.*;   
  4. import java.util.*;   
  5.   
  6. /**  
  7.  * java 读取配置(属性)文件    
  8.  * @author Billows.Van   
  9.  * billows.van@gmail.com  
  10.  */  
  11. public class EnvironmentConfig {   
  12.     static EnvironmentConfig ec;// 创建对象ec   
  13.     private static Hashtable<String, Properties> register = new Hashtable<String, Properties>();// 静态对象初始化[在其它对象之前]   
  14.   
  15.     private EnvironmentConfig() {   
  16.         super();   
  17.     }   
  18.   
  19.     /**  
  20.      * 取得EnvironmentConfig的一个实例  
  21.      */  
  22.     public static EnvironmentConfig getInstance() {   
  23.         if (ec == null)   
  24.             ec = new EnvironmentConfig();// 创建EnvironmentConfig对象   
  25.         return ec;// 返回EnvironmentConfig对象   
  26.     }   
  27.   
  28.     /**  
  29.      * 读取配置文件  
  30.      */  
  31.     public Properties getProperties(String fileName) {// 传递配置文件路径   
  32.         InputStream is = null;// 定义输入流is   
  33.         Properties p = null;   
  34.         try {   
  35.             p = (Properties) register.get(fileName);// 将fileName存于一个HashTable   
  36.             /**  
  37.              * 如果为空就尝试输入进文件  
  38.              */  
  39.             if (p == null) {   
  40.                 try {   
  41.                     is = new FileInputStream(fileName);// 创建输入流   
  42.                 } catch (Exception e) {   
  43.                     if (fileName.startsWith("/"))   
  44.                         // 用getResourceAsStream()方法用于定位并打开外部文件。   
  45.                         is = EnvironmentConfig.class.getResourceAsStream(fileName);   
  46.                     else  
  47.                         is = EnvironmentConfig.class.getResourceAsStream("/"+fileName);   
  48.                 }   
  49.                 p = new Properties();   
  50.                 p.load(is);// 加载输入流   
  51.                 register.put(fileName, p);// 将其存放于HashTable缓存   
  52.                 is.close();// 关闭输入流   
  53.             }   
  54.         } catch (Exception e) {   
  55.             e.printStackTrace(System.out);   
  56.         }   
  57.         return p;// 返回Properties对象   
  58.     }   
  59.   
  60.     /**  
  61.      * 此处插入方法描述。  
  62.      */  
  63.     public String getPropertyValue(String fileName, String strKey) {   
  64.         Properties p = getProperties(fileName);   
  65.         try {   
  66.             return (String) p.getProperty(strKey);   
  67.         } catch (Exception e) {   
  68.             e.printStackTrace(System.out);   
  69.         }   
  70.         return null;   
  71.     }   
  72. }  
package com.billows.util;

import java.io.*;
import java.util.*;

/**
 * java 读取配置(属性)文件  
 * @author Billows.Van 
 * billows.van@gmail.com
 */
public class EnvironmentConfig {
	static EnvironmentConfig ec;// 创建对象ec
	private static Hashtable<String, Properties> register = new Hashtable<String, Properties>();// 静态对象初始化[在其它对象之前]

	private EnvironmentConfig() {
		super();
	}

	/**
	 * 取得EnvironmentConfig的一个实例
	 */
	public static EnvironmentConfig getInstance() {
		if (ec == null)
			ec = new EnvironmentConfig();// 创建EnvironmentConfig对象
		return ec;// 返回EnvironmentConfig对象
	}

	/**
	 * 读取配置文件
	 */
	public Properties getProperties(String fileName) {// 传递配置文件路径
		InputStream is = null;// 定义输入流is
		Properties p = null;
		try {
			p = (Properties) register.get(fileName);// 将fileName存于一个HashTable
			/**
			 * 如果为空就尝试输入进文件
			 */
			if (p == null) {
				try {
					is = new FileInputStream(fileName);// 创建输入流
				} catch (Exception e) {
					if (fileName.startsWith("/"))
						// 用getResourceAsStream()方法用于定位并打开外部文件。
						is = EnvironmentConfig.class.getResourceAsStream(fileName);
					else
						is = EnvironmentConfig.class.getResourceAsStream("/"+fileName);
				}
				p = new Properties();
				p.load(is);// 加载输入流
				register.put(fileName, p);// 将其存放于HashTable缓存
				is.close();// 关闭输入流
			}
		} catch (Exception e) {
			e.printStackTrace(System.out);
		}
		return p;// 返回Properties对象
	}

	/**
	 * 此处插入方法描述。
	 */
	public String getPropertyValue(String fileName, String strKey) {
		Properties p = getProperties(fileName);
		try {
			return (String) p.getProperty(strKey);
		} catch (Exception e) {
			e.printStackTrace(System.out);
		}
		return null;
	}
}

 

用法:

Java代码 复制代码
  1. EnvironmentConfig ec=EnvironmentConfig.getInstance();   
  2. String driverClassName=ec.getPropertyValue("/config/jdbc.properties""jdbc.driverClassName");  
EnvironmentConfig ec=EnvironmentConfig.getInstance();
String driverClassName=ec.getPropertyValue("/config/jdbc.properties", "jdbc.driverClassName");

2.Jdbc工具

JdbcUtil.java

Java代码 复制代码
  1. package com.billows.util;   
  2.   
  3. import java.sql.Connection;   
  4. import java.sql.DriverManager;   
  5. import java.sql.PreparedStatement;   
  6. import java.sql.ResultSet;   
  7. import java.sql.SQLException;   
  8.   
  9. /**  
  10.  * @author Billows.Van haidii@126.com  
  11.  * @version 创建时间:2008-4-30 上午10:53:09 类说明  
  12.  */  
  13. public class JdbcUtil {   
  14.     static {   
  15.         try {   
  16.             EnvironmentConfig ec=EnvironmentConfig.getInstance();   
  17.             String driverClassName=ec.getPropertyValue("/config/jdbc.properties""jdbc.driverClassName");   
  18.             Class.forName(driverClassName);   
  19.         } catch (ClassNotFoundException e) {   
  20.             e.printStackTrace();   
  21.         }   
  22.     }   
  23.   
  24.     public static Connection getConnection() throws SQLException {   
  25.         Connection conn = null;   
  26.         EnvironmentConfig ec=EnvironmentConfig.getInstance();   
  27.         String url=ec.getPropertyValue("/config/jdbc.properties""jdbc.url");   
  28.         String name=ec.getPropertyValue("/config/jdbc.properties""jdbc.username");   
  29.         String pwd=ec.getPropertyValue("/config/jdbc.properties""jdbc.password");   
  30.         conn = DriverManager.getConnection(url, name, pwd);   
  31.         return conn;   
  32.     }   
  33.   
  34.     public static void release(Connection conn, PreparedStatement ps,ResultSet rs) {   
  35.         if (rs != null)try {rs.close();} catch (SQLException e) {e.printStackTrace();}   
  36.         if (ps != nulltry {ps.close();} catch (SQLException e) {e.printStackTrace();}   
  37.         if (conn!= null)try {conn.close();} catch (SQLException e) {e.printStackTrace();}   
  38.     }   
  39.   
  40.     public static void release(Object obj) {   
  41.         if (obj instanceof Connection) {   
  42.             Connection conn = (Connection) obj;   
  43.             if (conn != null)   
  44.                 try {   
  45.                     conn.close();   
  46.                 } catch (SQLException e) {   
  47.                     e.printStackTrace();   
  48.                 }   
  49.         }   
  50.         if (obj instanceof PreparedStatement) {   
  51.             PreparedStatement ps = (PreparedStatement) obj;   
  52.             if (ps != null)   
  53.                 try {   
  54.                     ps.close();   
  55.                 } catch (SQLException e) {   
  56.                     e.printStackTrace();   
  57.                 }   
  58.         }   
  59.         if (obj instanceof ResultSet) {   
  60.             ResultSet rs = (ResultSet) obj;   
  61.             if (rs != null)   
  62.                 try {   
  63.                     rs.close();   
  64.                 } catch (SQLException e) {   
  65.                     e.printStackTrace();   
  66.                 }   
  67.         }   
  68.     }   
  69. }  
package com.billows.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @author Billows.Van haidii@126.com
 * @version 创建时间:2008-4-30 上午10:53:09 类说明
 */
public class JdbcUtil {
	static {
		try {
			EnvironmentConfig ec=EnvironmentConfig.getInstance();
			String driverClassName=ec.getPropertyValue("/config/jdbc.properties", "jdbc.driverClassName");
			Class.forName(driverClassName);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	public static Connection getConnection() throws SQLException {
		Connection conn = null;
		EnvironmentConfig ec=EnvironmentConfig.getInstance();
		String url=ec.getPropertyValue("/config/jdbc.properties", "jdbc.url");
		String name=ec.getPropertyValue("/config/jdbc.properties", "jdbc.username");
		String pwd=ec.getPropertyValue("/config/jdbc.properties", "jdbc.password");
		conn = DriverManager.getConnection(url, name, pwd);
		return conn;
	}

	public static void release(Connection conn, PreparedStatement ps,ResultSet rs) {
		if (rs != null)try {rs.close();} catch (SQLException e) {e.printStackTrace();}
		if (ps != null) try {ps.close();} catch (SQLException e) {e.printStackTrace();}
		if (conn!= null)try {conn.close();} catch (SQLException e) {e.printStackTrace();}
	}

	public static void release(Object obj) {
		if (obj instanceof Connection) {
			Connection conn = (Connection) obj;
			if (conn != null)
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
		}
		if (obj instanceof PreparedStatement) {
			PreparedStatement ps = (PreparedStatement) obj;
			if (ps != null)
				try {
					ps.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
		}
		if (obj instanceof ResultSet) {
			ResultSet rs = (ResultSet) obj;
			if (rs != null)
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
		}
	}
}

 

3.java数据源

DBConnectionPool.java

Java代码 复制代码
  1. package com.billows.util;   
  2.   
  3. import java.sql.Connection;   
  4.   
  5. import javax.naming.Context;   
  6. import javax.naming.InitialContext;   
  7. import javax.sql.DataSource;   
  8.   
  9. public class DBConnectionPool {   
  10.     public static Connection getConnection() throws Exception{   
  11.         Context ctx = new InitialContext();    
  12.         DataSource ds = (DataSource)ctx.lookup("java:comp/env/hsql");    
  13. //      Context initContext = new InitialContext();   
  14. //      Context envContext = (Context)initContext.lookup("java:/comp/env");      
  15. //      DataSource ds = (DataSource)envContext.lookup("hsql");   
  16.         return ds.getConnection( );    
  17.     }   
  18. }  
package com.billows.util;

import java.sql.Connection;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class DBConnectionPool {
	public static Connection getConnection() throws Exception{
		Context ctx = new InitialContext(); 
		DataSource ds = (DataSource)ctx.lookup("java:comp/env/hsql"); 
//		Context initContext = new InitialContext();
//		Context envContext = (Context)initContext.lookup("java:/comp/env");   
//		DataSource ds = (DataSource)envContext.lookup("hsql");
		return ds.getConnection( ); 
	}
}

 4.hsqldb随web启动的Listener

Java代码 复制代码
  1. package com.billows.util;   
  2.   
  3. import java.sql.Connection;   
  4. import java.sql.DriverManager;   
  5. import java.sql.SQLException;   
  6. import java.sql.Statement;   
  7.   
  8. import javax.servlet.ServletContextEvent;   
  9. import javax.servlet.ServletContextListener;   
  10.   
  11. import org.apache.log4j.Logger;   
  12. import org.hsqldb.Server;   
  13.   
  14. import com.billows.util.EnvironmentConfig;   
  15. /**  
  16.  * 该listener随web服务启动 并同时启动hsql-server  
  17.  * @auth Billows.Van   
  18.  * billows.van@gmail.com  
  19.  */  
  20. public class HsqlListener implements ServletContextListener {   
  21.     public static final Logger log = Logger.getLogger("HsqlListener");   
  22.     private EnvironmentConfig ec=EnvironmentConfig.getInstance();   
  23.     /**配置文件中的占位符,代表webapp发布后的根目录.*/  
  24.     public static final String TOKEN = "${webapp.root}";   
  25.     /** 等待数据库停止的最大时间.*/  
  26.     public static final int WAIT_TIME = 1000;   
  27.     /**jdbc的url.*/  
  28.     private String url;   
  29.     /**登陆用户名.*/  
  30.     private String username;   
  31.     /**登陆密码.*/  
  32.     private String password;   
  33.      /**处理context初始化事件.   
  34.       * @param sce ServletContextEvent  
  35.       */     
  36.      public void contextInitialized(ServletContextEvent sce) {     
  37.          try {     
  38.              username = ec.getPropertyValue("/config/jdbc.properties""jdbc.username");   
  39.              password = ec.getPropertyValue("/config/jdbc.properties""jdbc.password");   
  40.              String databaseName = ec.getPropertyValue("/config/jdbc.properties""jdbc.dbname");   
  41.              int port = Integer.parseInt(ec.getPropertyValue("/config/jdbc.properties""jdbc.dbport"));     
  42.              String hsqlPath = ec.getPropertyValue("/config/jdbc.properties""jdbc.dbpath");   
  43.       
  44.              // FIXME: 因为要用到getRealPath方法获得路径,在使用war包发布的时候会出现问题     
  45.              if (hsqlPath.startsWith(TOKEN)) {     
  46.                  String webappRoot = sce.getServletContext().getRealPath("/").replace("\\", "/");     
  47.                  hsqlPath = hsqlPath.substring(TOKEN.length());     
  48.                  hsqlPath = webappRoot + hsqlPath;   
  49.              }   
  50.              String databasePath = hsqlPath + "/" + databaseName;     
  51.              url = "jdbc:hsqldb:hsql://localhost:" + port + "/" + databaseName;     
  52.              Server server = new Server();     
  53.              server.setDatabaseName(0, databaseName);   
  54.              server.setDatabasePath(0, databasePath);     
  55.              server.setPort(port);     
  56.              server.setSilent(true);   
  57.              server.start();   
  58.              Thread.sleep(WAIT_TIME);     
  59.              log.info("Hsqldb启动成功!");   
  60.          } catch (Exception ex) {     
  61.              log.error("Hsqldb启动失败:" + ex);     
  62.          }     
  63.      }     
  64.       
  65.      /**   
  66.       * 处理context销毁事件.   
  67.       * @param sce ServletContextEvent   
  68.       */     
  69.      public void contextDestroyed(ServletContextEvent sce) {     
  70.          try {     
  71.              Class.forName("org.hsqldb.jdbcDriver");     
  72.              Connection conn = null;     
  73.              Statement state = null;     
  74.              try {   
  75.                  // 向数据库发送shutdown命令,关闭数据库     
  76.                  conn = DriverManager.getConnection(url, username, password);     
  77.                  state = conn.createStatement();     
  78.                  state.executeUpdate("SHUTDOWN;");   
  79.                  try {   
  80.                     Thread.sleep(WAIT_TIME);   
  81.                 } catch (InterruptedException e) {   
  82.                     e.printStackTrace();   
  83.                 }   
  84.                 log.info("关闭hsqldb数据库成功!");   
  85.              } catch (SQLException ex1) {     
  86.                  log.error("关闭hsqldb数据库时出现异常:" + ex1);     
  87.              } finally {     
  88.                  // 确保关闭Statement     
  89.                  if (state != null) {     
  90.                      try {     
  91.                          state.close();     
  92.                          state = null;     
  93.                      } catch (SQLException ex1) {     
  94.                          log.error("关闭Statement时异常:"+ex1);     
  95.                      }     
  96.                  }     
  97.                  // 确保关闭Connection     
  98.                  if (conn != null) {     
  99.                      try {     
  100.                          conn.close();     
  101.                          conn = null;     
  102.                      } catch (SQLException ex1) {     
  103.                          log.error("关闭Connection时异常:"+ex1);     
  104.                      }     
  105.                  }     
  106.              }     
  107.          } catch (ClassNotFoundException ex) {     
  108.              log.error("HsqldbListener : contextDestoryed : error : " + ex);     
  109.          }     
  110.      }     
  111. }  
package com.billows.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.log4j.Logger;
import org.hsqldb.Server;

import com.billows.util.EnvironmentConfig;
/**
 * 该listener随web服务启动 并同时启动hsql-server
 * @auth Billows.Van 
 * billows.van@gmail.com
 */
public class HsqlListener implements ServletContextListener {
	public static final Logger log = Logger.getLogger("HsqlListener");
	private EnvironmentConfig ec=EnvironmentConfig.getInstance();
	/**配置文件中的占位符,代表webapp发布后的根目录.*/
	public static final String TOKEN = "${webapp.root}";
	/** 等待数据库停止的最大时间.*/
	public static final int WAIT_TIME = 1000;
	/**jdbc的url.*/
	private String url;
	/**登陆用户名.*/
	private String username;
	/**登陆密码.*/
	private String password;
     /**处理context初始化事件. 
      * @param sce ServletContextEvent
      */  
     public void contextInitialized(ServletContextEvent sce) {  
         try {  
             username = ec.getPropertyValue("/config/jdbc.properties", "jdbc.username");
             password = ec.getPropertyValue("/config/jdbc.properties", "jdbc.password");
             String databaseName = ec.getPropertyValue("/config/jdbc.properties", "jdbc.dbname");
             int port = Integer.parseInt(ec.getPropertyValue("/config/jdbc.properties", "jdbc.dbport"));  
             String hsqlPath = ec.getPropertyValue("/config/jdbc.properties", "jdbc.dbpath");
   
             // FIXME: 因为要用到getRealPath方法获得路径,在使用war包发布的时候会出现问题  
             if (hsqlPath.startsWith(TOKEN)) {  
                 String webappRoot = sce.getServletContext().getRealPath("/").replace("\\", "/");  
                 hsqlPath = hsqlPath.substring(TOKEN.length());  
                 hsqlPath = webappRoot + hsqlPath;
             }
             String databasePath = hsqlPath + "/" + databaseName;  
             url = "jdbc:hsqldb:hsql://localhost:" + port + "/" + databaseName;  
             Server server = new Server();  
             server.setDatabaseName(0, databaseName);
             server.setDatabasePath(0, databasePath);  
             server.setPort(port);  
             server.setSilent(true);
             server.start();
             Thread.sleep(WAIT_TIME);  
             log.info("Hsqldb启动成功!");
         } catch (Exception ex) {  
        	 log.error("Hsqldb启动失败:" + ex);  
         }  
     }  
   
     /** 
      * 处理context销毁事件. 
      * @param sce ServletContextEvent 
      */  
     public void contextDestroyed(ServletContextEvent sce) {  
         try {  
             Class.forName("org.hsqldb.jdbcDriver");  
             Connection conn = null;  
             Statement state = null;  
             try {
                 // 向数据库发送shutdown命令,关闭数据库  
                 conn = DriverManager.getConnection(url, username, password);  
                 state = conn.createStatement();  
                 state.executeUpdate("SHUTDOWN;");
                 try {
					Thread.sleep(WAIT_TIME);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				log.info("关闭hsqldb数据库成功!");
             } catch (SQLException ex1) {  
                 log.error("关闭hsqldb数据库时出现异常:" + ex1);  
             } finally {  
                 // 确保关闭Statement  
                 if (state != null) {  
                     try {  
                         state.close();  
                         state = null;  
                     } catch (SQLException ex1) {  
                    	 log.error("关闭Statement时异常:"+ex1);  
                     }  
                 }  
                 // 确保关闭Connection  
                 if (conn != null) {  
                     try {  
                         conn.close();  
                         conn = null;  
                     } catch (SQLException ex1) {  
                         log.error("关闭Connection时异常:"+ex1);  
                     }  
                 }  
             }  
         } catch (ClassNotFoundException ex) {  
             log.error("HsqldbListener : contextDestoryed : error : " + ex);  
         }  
     }  
}

其中, jdbc.properties内容为

Properties代码 复制代码
  1. jdbc.driverClassName=org.hsqldb.jdbcDriver   
  2. jdbc.url=jdbc:hsqldb:hsql://localhost:9990/billows   
  3. jdbc.dbname=billows   
  4. jdbc.dbport=9990  
  5. jdbc.dbpath=${webapp.root}/hsqldb   
  6. jdbc.username=sa   
  7. jdbc.password=   
  8. jdbc.max_connections=30  
jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:hsql://localhost:9990/billows
jdbc.dbname=billows
jdbc.dbport=9990
jdbc.dbpath=${webapp.root}/hsqldb
jdbc.username=sa
jdbc.password=
jdbc.max_connections=30

 在web.xml中添加以下代码即可

Xml代码 复制代码
  1. <listener>  
  2.     <listener-class>com.billows.util.HsqlListener</listener-class>  
  3. </listener>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值