重写Spring的PropertyPlaceholderConfigurer,从数据库加载配置数据
来源:互联网 发布:安装sql server 2008 编辑:程序博客网 时间:2024/06/09 23:40
1,applicationContext.xml
用自定义扩展类DataBasePropertyPlaceholderConfigurer替换Spring的PropertyPlaceholderConfigurer
<!-- 从数据库配置表加载系统配置属性 -->
<bean id="dataBasePropertyConfigurer" class="com.crc.util.DataBasePropertyPlaceholderConfigurer">
</bean>
2,DataBasePropertyPlaceholderConfigurer.java
package com.crc.util;import java.util.Properties;import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;public class DataBasePropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer{@Overridepublic Properties mergeProperties() {return ConfigPropertiesUtil.getProperties();}}
3,ConfigPropertiesUtil.java,从数据库读取配置数据的工具类
package com.crc.util;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Properties;import java.util.concurrent.locks.ReentrantReadWriteLock;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;import javax.sql.DataSource;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class ConfigPropertiesUtil{private static final String JNDI_PREFIX = "java:comp/env/";private static final String JNDI_NAME = "jdbc/reimburse";private static Properties properties = null;private static final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();private static final String queryString = "select t.property_key, t.property_value from appmgr.t_config_properties t";private static final Logger logger = LoggerFactory.getLogger(ConfigPropertiesUtil.class);private ConfigPropertiesUtil() {}public static String getValueByKey(String key){if(key == null || "".equals(key.trim())){return "";}loadProperties();return properties.get(key) == null ? "" : properties.get(key).toString();}public static Properties getProperties(){loadProperties();return properties;}private static void loadProperties(){readWriteLock.readLock().lock();if(properties == null){readWriteLock.readLock().unlock();readWriteLock.writeLock().lock();if(properties == null){properties = new Properties();DataSource dataSource = null;Connection connection = null;PreparedStatement statement = null;ResultSet resultSet = null;Context context = null;try{context = new InitialContext();}catch(NamingException e3){logger.error("初始化JNDI上下文出错(加载系统配置数据):", e3);readWriteLock.writeLock().unlock();return;}try{dataSource = (DataSource)(context.lookup(JNDI_NAME));}catch(NamingException e1){try{dataSource = (DataSource)(context.lookup(JNDI_PREFIX + JNDI_NAME));}catch(NamingException e2){logger.error("获取JNDI数据源出错(加载系统配置数据):", e2);readWriteLock.writeLock().unlock();return;}}try{connection = dataSource.getConnection();statement = connection.prepareStatement(queryString);resultSet = statement.executeQuery();while(resultSet.next()){properties.setProperty(resultSet.getString(1), resultSet.getString(2) == null ? "" : resultSet.getString(2).trim());}logger.info("==========================加载配置数据开始============================");logger.info(properties.toString());logger.info("==========================加载配置数据结束============================");}catch(Exception e){logger.error("加载系统配置数据出错:", e);}finally{if(resultSet != null){try{resultSet.close();}catch(SQLException e){e.printStackTrace();}}if(statement != null){try{statement.close();}catch(SQLException e){e.printStackTrace();}}if(connection != null){try{connection.close();}catch(SQLException e){e.printStackTrace();}}}}readWriteLock.readLock().lock();readWriteLock.writeLock().unlock();}readWriteLock.readLock().unlock();}}
0 0
- 重写Spring的PropertyPlaceholderConfigurer,从数据库加载配置数据
- spring的 PropertyPlaceholderConfigurer配置
- spring ApplicationContext.xml之PropertyPlaceholderConfigurer配置数据库
- Spring PropertyPlaceholderConfigurer 自定义扩展来解决多环境配置加载的问题
- 使用Spring的PropertyPlaceholderConfigurer类配置datasource
- spring使用多个PropertyPlaceholderConfigurer的配置
- spring使用多个PropertyPlaceholderConfigurer的配置
- spring使用多个PropertyPlaceholderConfigurer的配置
- 系统启动PropertyPlaceholderConfigurer加载配置到spring容器中
- Spring配置之PropertyPlaceholderConfigurer
- Spring 配置之 PropertyPlaceholderConfigurer
- spring的好处--PropertyPlaceholderConfigurer
- spring的好处--PropertyPlaceholderConfigurer
- Spring的PropertyPlaceholderConfigurer应用
- Spring的PropertyPlaceholderConfigurer应用
- Spring的PropertyPlaceholderConfigurer应用
- Spring的PropertyPlaceholderConfigurer
- Spring PropertyPlaceholderConfigurer的使用
- HDU 5492 Find a path
- 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题(含代码)
- 用户行为分析笔记(二):系统的整体架构
- Android 属性大全
- Android 布局参数对象LayoutParam的使用
- 重写Spring的PropertyPlaceholderConfigurer,从数据库加载配置数据
- 人脸识别--人脸识别技术综述
- Rabbitmq unack过多处理
- Codeforces Round #371 (Div. 2)B. Filya and Homework
- iOS10配置须知
- HDU 1754 单点更新 区间求和 zkw线段树 + 递归线段树
- lightoj 1110 - An Easy LCS (LCS输出路径)
- [Javascript]对象数组排序
- [编程题]字符串分隔