首先在配置文件中配置PropertyPlaceholderConfigurer
单个配置文件:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:jdbc.properties"/>
</bean>
多个配置文件:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
<value>classpath:config.properties</value>
</list>
</property>
</bean>
package xxx.common.config;
import java.util.Properties;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
/**
* 功能描述:全局配置的placeholder
* @author winker
* time : 2012-10-21 下午01:12:04
*/
public class GlobalConfigPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
@Override
protected String resolvePlaceholder(String placeholder, Properties props) {
String result = GlobalConfig.getString(placeholder);
if (result == null) {
return super.resolvePlaceholder(placeholder, props);
} else {
return result;
}
}
}
package xxx.common.config;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import org.apache.commons.configuration.CombinedConfiguration;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationConverter;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.FileConfiguration;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.SystemConfiguration;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 功能描述:获得全局的配置
*
* @author winker time : 2012-10-25
*/
public class GlobalConfig {
private static Logger logger = LoggerFactory.getLogger(GlobalConfig.class);
private static CombinedConfiguration globalConfig;
private static GlobalConfig _self = new GlobalConfig();
private final static String APP_CONFIG_FILE_NAME = "application.properties";
private final static String PROPERTY_FILE_EXTENSION = "properties";
private final static String DEFAULT_CONFIG_DIR = "/opt/config";
private boolean hasError = false;
private String errMsg = "GlobalConfig is not initialized";
private final String FS = File.separator;
public GlobalConfig() {
// //////////////////////////////////载入应用配置////////////////////////////////////
InputStream appConfigInputStream = GlobalConfig.class
.getResourceAsStream("/" + APP_CONFIG_FILE_NAME);
Properties appProperties = new Properties();
if (appConfigInputStream == null) {
hasError = true;
errMsg = "can't find application.properties in classpath";
return;
}
try {
appProperties.load(appConfigInputStream);
} catch (IOException e) {
hasError = true;
errMsg = e.getMessage();
logger.error(e.getMessage(), e);
return;
}
String configPath = appProperties.getProperty("CONFIG_PATH");
String appCode = appProperties.getProperty("APPLICATION_CODE");
// 检查参数
if (!hasError && StringUtils.isBlank(appCode)) {
hasError = true;
errMsg = "APP_CODE can't be empty";
return;
}
// 指定目录
String configDir = System.getProperty("config.dir");
if (StringUtils.isBlank(configDir)) {
logger.info("not assign ${config.dir}");
configDir = DEFAULT_CONFIG_DIR;
logger.info("finding configFile in " + configDir);
if (!new File(configDir).exists()) {
logger.info(configDir + " is not exist ");
configDir = System.getProperty("user.home") + "/autoconfig";
logger.info("finding configFile in " + configDir);
if (!new File(configDir).exists()) {
if (!new File(configDir).mkdir()) {
logger.info(configDir + " is not exist ");
hasError = true;
errMsg = "not found any config dir ["
+ DEFAULT_CONFIG_DIR + ","
+ System.getProperty("user.home")
+ "/autoconfig" + "]";
return;
}
}
}
}
// 没找到全局配置,创建默认值
if (!hasError && globalConfig == null) {
logger.info("create default configration");
globalConfig = new CombinedConfiguration();
globalConfig.addConfiguration(new SystemConfiguration());
}
// //////////////////////////////////集中配置////////////////////////////////////
loadCentralConfig(configPath, appCode);
// //////////////////////////////////属性文件////////////////////////////////////
loadFromFile(configPath, appCode, configDir);
if (hasError) {
logger.error("GlobalConfig init failed . " + errMsg);
return;
}
doAfter(configPath, appCode, configDir);
logger.info("GlobalConfig init complete . ");
}
private void loadCentralConfig(String configPath, String appCode) {
String serviceUrl = System.getProperty("config.central.url");
if (!hasError && StringUtils.isNotBlank(serviceUrl)) {
String stage = System.getProperty("config.stage");
if (StringUtils.isBlank(stage)) {
hasError = true;
errMsg = "central configuration init failed , ${config.stage} can't be empty ";
return;
}
try {
CentralConfiguration centralConfiguration = new CentralConfiguration(
serviceUrl, stage, configPath, appCode);
globalConfig.addConfiguration(centralConfiguration);
} catch (Exception e) {
hasError = true;
errMsg = "central configuration load failed ," + e.getMessage();
logger.error(
"central configuration load failed ," + e.getMessage(),
e);
return;
}
}
}
private void loadFromFile(String configPath, String appCode,
String configDir) {
if (!hasError) {
// 配置根目录
File configDirFile = new File(configDir);
// 查找ZF号目录
if (StringUtils.isNotBlank(appCode)) {
File zfdir = new File(configDirFile, appCode);
if (zfdir.exists() && zfdir.isDirectory()) {
loadPropertiesFromDir(zfdir);
}
}
// 查找config号目录
if (StringUtils.isNotBlank(configPath)) {
File configCodeDir = new File(configDirFile, configPath);
if (configCodeDir.exists() && configCodeDir.isDirectory()) {
loadPropertiesFromDir(configCodeDir);
}
}
}
}
private void doAfter(String configPath, String appCode, String configDir) {
// //////////////////////////////////检查被覆盖的属性////////////////////////////////////
List<Configuration> existConfigurations = new ArrayList<Configuration>();
for (int i = 0; i < globalConfig.getNumberOfConfigurations(); i++) {
Configuration configuration = globalConfig.getConfiguration(i);
checkOverwrite(configuration, existConfigurations);
existConfigurations.add(configuration);
}
if (globalConfig.getNumberOfConfigurations() == 1
&& globalConfig.getConfiguration(0) instanceof SystemConfiguration) {
StringBuilder sb = new StringBuilder();
String findDir = configDir;
findDir = new File(findDir).getAbsolutePath();
sb.append("find in " + findDir + FS + appCode).append("\n");
if (StringUtils.isNotBlank(configPath)) {
sb.append("find in " + findDir + FS + configPath).append("\n");
}
logger.warn("not found any properties file and central config . \n"
+ sb);
}
}
private void loadPropertiesFromDir(File configDirFile) {
if (configDirFile.exists() && configDirFile.isDirectory()) {
// 查找属性文件,不查找子目录
Collection<File> propertiesFiles = FileUtils.listFiles(
configDirFile, new String[] { PROPERTY_FILE_EXTENSION },
false);
for (File file : propertiesFiles) {
loadProperties(file);
}
} else {
logger.warn("config.dir[{}] not exist",
configDirFile.getAbsolutePath());
}
}
private static void checkOverwrite(Configuration configuration,
List<Configuration> existConfigurations) {
Iterator<String> keys = configuration.getKeys();
while (keys.hasNext()) {
String key = keys.next();
Configuration existConfiguration = getExistConfiguration(key,
existConfigurations);
if (existConfiguration != null) {
StringBuilder sb = new StringBuilder();
sb.append("Overwrite property[" + key + "][")
.append(getConfigurationTitle(configuration))
.append("]");
sb.append(" overwrite by ").append("[")
.append(getConfigurationTitle(existConfiguration))
.append("]");
logger.warn(sb.toString());
}
}
}
private static String getConfigurationTitle(Configuration configuration) {
if (configuration instanceof FileConfiguration) {
return ((FileConfiguration) configuration).getFile().getName();
} else if (configuration instanceof SystemConfiguration) {
return "System Properties";
} else {
return configuration.toString();
}
}
private static Configuration getExistConfiguration(String key,
List<Configuration> existConfigurations) {
for (Configuration configuration : existConfigurations) {
if (configuration.containsKey(key)) {
return configuration;
}
}
return null;
}
private void loadProperties(File propertiesFile) {
try {
// 检查是否已加载
for (int i = 0; i < globalConfig.getNumberOfConfigurations(); i++) {
Configuration configuration = globalConfig.getConfiguration(i);
if (configuration instanceof FileConfiguration) {
File loadedFile = ((FileConfiguration) configuration)
.getFile();
if (loadedFile.equals(propertiesFile)) {
logger.warn("Skip already loaded File[{}]",
propertiesFile.getAbsolutePath());
return;
}
}
}
logger.warn("load properties file {}",
propertiesFile.getAbsolutePath());
globalConfig.addConfiguration(new PropertiesConfiguration(
propertiesFile));
} catch (ConfigurationException e) {
hasError = true;
errMsg = e.getMessage();
logger.error(e.getMessage(), e);
}
}
private static void checkError() throws IllegalStateException {
if (_self.hasError) {
throw new IllegalStateException(_self.errMsg);
}
}
@SuppressWarnings("unchecked")
public static Iterator<String> getKeys() {
checkError();
return globalConfig.getKeys();
}
public Properties getProperties() {
checkError();
return ConfigurationConverter.getProperties(globalConfig);
}
public static boolean containsKey(String key) {
checkError();
return globalConfig.containsKey(key);
}
public static String getString(String key) {
checkError();
return globalConfig.getString(key);
}
public static Boolean getBoolean(String key) {
checkError();
return globalConfig.getBoolean(key, null);
}
public static Byte getByte(String key) {
checkError();
return globalConfig.getByte(key, null);
}
public static Short getShort(String key) {
checkError();
return globalConfig.getShort(key, null);
}
public static Integer getInt(String key) {
checkError();
return globalConfig.getInteger(key, null);
}
public static Long getLong(String key) {
checkError();
return globalConfig.getLong(key, null);
}
public static Float getFloat(String key) {
checkError();
return globalConfig.getFloat(key, null);
}
public static Double getDouble(String key) {
checkError();
return globalConfig.getDouble(key, null);
}
public static BigDecimal getBigDecimal(String key) {
checkError();
return globalConfig.getBigDecimal(key);
}
public BigInteger getBigInteger(String key) {
checkError();
return globalConfig.getBigInteger(key);
}
}
相关推荐
spring读取properties.
Spring 读取properties文件key+value方式.rar
spring读取properties配置文件的key值。
主要介绍了spring无法读取properties文件数据问题详解,需要的朋友可以参考下
主要介绍了Spring用代码来读取properties文件实例解析,具有一定借鉴价值,需要的朋友可以参考下
主要介绍了Spring Boot的properties配置文件读取,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
之前的系统用的是Spring框架,国际化还是比较简单的。但是有一些提示是写在js文件里面的,搜了一些,发现一个js国际化的框架jquery.i18n.properties.js,用了一些还是比较方便的。
NULL 博文链接:https://nannan408.iteye.com/blog/2256177
主要介绍了Spring中属性文件properties的读取与使用详解的相关资料,需要的朋友可以参考下
本篇文章主要介绍了Spring中配置和读取多个Properties文件的方式方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
读properties文件和事务管理的demo,里面包括对一个bundle一个properties文件和多个bundle公用一个properties文件,事务的管理
读取 /WEB-INF/jdbc.properties 文件. 你可以在 list 标签中配置多个 value 标签. database.xml: 1 2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" ...
1.27 Spring Boot环境变量读取和属性对象的绑定 1.28 Spring Boot使用自定义的properties 1.29 改变自动扫描的包 1.30 Spring Boot Junit单元测试 1.31 SpringBoot启动时的Banner设置 1.32 Spring boot 文件上传(多...
velocity.properties 14.4.4.2. FreeMarker 14.4.5. 绑定支持和表单处理 14.4.5.1. 用于绑定的宏 14.4.5.2. 简单绑定 14.4.5.3. 表单输入生成宏 14.4.5.4. 重载HTML转码行为并使你的标签符合XHTML 14.5. XSLT ...
1、在maven工程导入spring坐标 2、dao层的内容与结构 接口 实现类 3、server层的内容与结构 4、创建properties文件 5、配置文件样式 标签头代码:
2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@...
有spring jdbctemplate 增删改查 配置spring自带的、c3p0、dbcp、druid 4种连接池 以及读取jdbc.properties数据源 自己写的一个行映射器工具类
摘要: Spring对Properties的读取进行了完善而全面的封装,对于写则仍需配合FileOutputStream进行。 package com.oolong.common.util; import org.springframework.core.io.support....
今天小编就为大家分享一篇关于Spring加载配置和读取多个Properties文件的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
spring boot 配置文件