mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
精简XXXTypeGetter
This commit is contained in:
@@ -3,13 +3,11 @@ package cn.hutool.setting;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.bean.copier.CopyOptions;
|
||||
import cn.hutool.core.bean.copier.ValueProvider;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.lang.getter.OptNullBasicTypeFromStringGetter;
|
||||
import cn.hutool.core.lang.getter.GroupedTypeGetter;
|
||||
import cn.hutool.core.lang.getter.TypeGetter;
|
||||
import cn.hutool.core.reflect.ConstructorUtil;
|
||||
import cn.hutool.core.text.StrUtil;
|
||||
import cn.hutool.core.util.ObjUtil;
|
||||
import cn.hutool.log.Log;
|
||||
import cn.hutool.log.LogFactory;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.lang.reflect.Type;
|
||||
@@ -19,35 +17,22 @@ import java.lang.reflect.Type;
|
||||
*
|
||||
* @author Looly
|
||||
*/
|
||||
public abstract class AbsSetting implements OptNullBasicTypeFromStringGetter<String>, Serializable {
|
||||
public abstract class AbsSetting implements TypeGetter<CharSequence>,
|
||||
GroupedTypeGetter<CharSequence, CharSequence>, Serializable {
|
||||
private static final long serialVersionUID = 6200156302595905863L;
|
||||
private final static Log log = LogFactory.get();
|
||||
|
||||
/**
|
||||
* 数组类型值默认分隔符
|
||||
*/
|
||||
public final static String DEFAULT_DELIMITER = ",";
|
||||
public final static String DEFAULT_DELIMITER = StrUtil.COMMA;
|
||||
/**
|
||||
* 默认分组
|
||||
*/
|
||||
public final static String DEFAULT_GROUP = StrUtil.EMPTY;
|
||||
|
||||
@Override
|
||||
public String getStr(final String key, final String defaultValue) {
|
||||
return getStr(key, DEFAULT_GROUP, defaultValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得字符串类型值
|
||||
*
|
||||
* @param key KEY
|
||||
* @param group 分组
|
||||
* @param defaultValue 默认值
|
||||
* @return 值,如果字符串为{@code null}返回默认值
|
||||
*/
|
||||
public String getStr(final String key, final String group, final String defaultValue) {
|
||||
final String value = getByGroup(key, group);
|
||||
return ObjUtil.defaultIfNull(value, defaultValue);
|
||||
public Object getObj(final CharSequence key, final Object defaultValue) {
|
||||
return ObjUtil.defaultIfNull(getObjByGroup(key, DEFAULT_GROUP), defaultValue);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -57,53 +42,11 @@ public abstract class AbsSetting implements OptNullBasicTypeFromStringGetter<Str
|
||||
* @param group 分组
|
||||
* @param defaultValue 默认值
|
||||
* @return 值,如果字符串为{@code null}或者""返回默认值
|
||||
* @since 5.2。4
|
||||
*/
|
||||
public String getStrNotEmpty(final String key, final String group, final String defaultValue) {
|
||||
final String value = getByGroup(key, group);
|
||||
public String getByGroupNotEmpty(final String key, final String group, final String defaultValue) {
|
||||
final String value = getStrByGroup(key, group);
|
||||
return StrUtil.defaultIfEmpty(value, defaultValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得指定分组的键对应值
|
||||
*
|
||||
* @param key 键
|
||||
* @param group 分组
|
||||
* @return 值
|
||||
*/
|
||||
public abstract String getByGroup(String key, String group);
|
||||
|
||||
// --------------------------------------------------------------- Get
|
||||
|
||||
/**
|
||||
* 带有日志提示的get,如果没有定义指定的KEY,则打印debug日志
|
||||
*
|
||||
* @param key 键
|
||||
* @return 值
|
||||
*/
|
||||
public String getWithLog(final String key) {
|
||||
final String value = getStr(key);
|
||||
if (value == null) {
|
||||
log.debug("No key define for [{}]!", key);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 带有日志提示的get,如果没有定义指定的KEY,则打印debug日志
|
||||
*
|
||||
* @param key 键
|
||||
* @param group 分组
|
||||
* @return 值
|
||||
*/
|
||||
public String getByGroupWithLog(final String key, final String group) {
|
||||
final String value = getByGroup(key, group);
|
||||
if (value == null) {
|
||||
log.debug("No key define for [{}] of group [{}] !", key, group);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------- Get string array
|
||||
|
||||
/**
|
||||
@@ -112,8 +55,8 @@ public abstract class AbsSetting implements OptNullBasicTypeFromStringGetter<Str
|
||||
* @param key 属性名
|
||||
* @return 属性值
|
||||
*/
|
||||
public String[] getStrings(final String key) {
|
||||
return getStrings(key, null);
|
||||
public String[] getStrs(final String key) {
|
||||
return getStrs(key, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -123,8 +66,8 @@ public abstract class AbsSetting implements OptNullBasicTypeFromStringGetter<Str
|
||||
* @param defaultValue 默认的值
|
||||
* @return 属性值
|
||||
*/
|
||||
public String[] getStringsWithDefault(final String key, final String[] defaultValue) {
|
||||
String[] value = getStrings(key, null);
|
||||
public String[] getStrs(final CharSequence key, final String[] defaultValue) {
|
||||
String[] value = getStrsByGroup(key, null);
|
||||
if (null == value) {
|
||||
value = defaultValue;
|
||||
}
|
||||
@@ -133,149 +76,42 @@ public abstract class AbsSetting implements OptNullBasicTypeFromStringGetter<Str
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得数组型
|
||||
* 获得数组型默认逗号分隔<br>
|
||||
* 若配置文件中键值对类似于:
|
||||
* <pre>
|
||||
* a = 1,2,3,4
|
||||
* </pre>
|
||||
* 则获取结果为:[1, 2, 3, 4]
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @return 属性值
|
||||
*/
|
||||
public String[] getStrings(final String key, final String group) {
|
||||
return getStrings(key, group, DEFAULT_DELIMITER);
|
||||
public String[] getStrsByGroup(final CharSequence key, final CharSequence group) {
|
||||
return getStrsByGroup(key, group, DEFAULT_DELIMITER);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得数组型
|
||||
* 获得数组型,可自定义分隔符<br>
|
||||
* 假定分隔符为逗号,若配置文件中键值对类似于:
|
||||
* <pre>
|
||||
* a = 1,2,3,4
|
||||
* </pre>
|
||||
* 则获取结果为:[1, 2, 3, 4]
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @param delimiter 分隔符
|
||||
* @return 属性值
|
||||
*/
|
||||
public String[] getStrings(final String key, final String group, final String delimiter) {
|
||||
final String value = getByGroup(key, group);
|
||||
public String[] getStrsByGroup(final CharSequence key, final CharSequence group, final CharSequence delimiter) {
|
||||
final String value = getStrByGroup(key, group);
|
||||
if (StrUtil.isBlank(value)) {
|
||||
return null;
|
||||
}
|
||||
return StrUtil.splitToArray(value, delimiter);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------- Get int
|
||||
|
||||
/**
|
||||
* 获取数字型型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @return 属性值
|
||||
*/
|
||||
public Integer getInt(final String key, final String group) {
|
||||
return getInt(key, group, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取数字型型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @param defaultValue 默认值
|
||||
* @return 属性值
|
||||
*/
|
||||
public Integer getInt(final String key, final String group, final Integer defaultValue) {
|
||||
return Convert.toInt(getByGroup(key, group), defaultValue);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------- Get bool
|
||||
|
||||
/**
|
||||
* 获取布尔型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @return 属性值
|
||||
*/
|
||||
public Boolean getBool(final String key, final String group) {
|
||||
return getBool(key, group, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取布尔型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @param defaultValue 默认值
|
||||
* @return 属性值
|
||||
*/
|
||||
public Boolean getBool(final String key, final String group, final Boolean defaultValue) {
|
||||
return Convert.toBool(getByGroup(key, group), defaultValue);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------- Get long
|
||||
|
||||
/**
|
||||
* 获取long类型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @return 属性值
|
||||
*/
|
||||
public Long getLong(final String key, final String group) {
|
||||
return getLong(key, group, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取long类型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @param defaultValue 默认值
|
||||
* @return 属性值
|
||||
*/
|
||||
public Long getLong(final String key, final String group, final Long defaultValue) {
|
||||
return Convert.toLong(getByGroup(key, group), defaultValue);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------- Get char
|
||||
|
||||
/**
|
||||
* 获取char类型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @return 属性值
|
||||
*/
|
||||
public Character getChar(final String key, final String group) {
|
||||
final String value = getByGroup(key, group);
|
||||
if (StrUtil.isBlank(value)) {
|
||||
return null;
|
||||
}
|
||||
return value.charAt(0);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------- Get double
|
||||
|
||||
/**
|
||||
* 获取double类型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @return 属性值
|
||||
*/
|
||||
public Double getDouble(final String key, final String group) {
|
||||
return getDouble(key, group, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取double类型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @param defaultValue 默认值
|
||||
* @return 属性值
|
||||
*/
|
||||
public Double getDouble(final String key, final String group, final Double defaultValue) {
|
||||
return Convert.toDouble(getByGroup(key, group), defaultValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将setting中的键值关系映射到对象中,原理是调用对象对应的set方法<br>
|
||||
* 只支持基本类型的转换
|
||||
@@ -285,17 +121,17 @@ public abstract class AbsSetting implements OptNullBasicTypeFromStringGetter<Str
|
||||
* @param bean Bean对象
|
||||
* @return Bean
|
||||
*/
|
||||
public <T> T toBean(final String group, final T bean) {
|
||||
public <T> T toBean(final CharSequence group, final T bean) {
|
||||
return BeanUtil.fillBean(bean, new ValueProvider<String>() {
|
||||
|
||||
@Override
|
||||
public Object value(final String key, final Type valueType) {
|
||||
return getByGroup(key, group);
|
||||
return getObjByGroup(key, group);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsKey(final String key) {
|
||||
return null != getByGroup(key, group);
|
||||
return null != getObjByGroup(key, group);
|
||||
}
|
||||
}, CopyOptions.of());
|
||||
}
|
||||
@@ -310,7 +146,7 @@ public abstract class AbsSetting implements OptNullBasicTypeFromStringGetter<Str
|
||||
* @return Bean
|
||||
* @since 5.0.6
|
||||
*/
|
||||
public <T> T toBean(final String group, final Class<T> beanClass) {
|
||||
public <T> T toBean(final CharSequence group, final Class<T> beanClass) {
|
||||
return toBean(group, ConstructorUtil.newInstanceIfPossible(beanClass));
|
||||
}
|
||||
|
||||
|
@@ -35,12 +35,12 @@ public class GroupedMap extends LinkedHashMap<String, LinkedHashMap<String, Stri
|
||||
* @param key 键
|
||||
* @return 值,如果分组不存在或者值不存在则返回null
|
||||
*/
|
||||
public String get(final String group, final String key) {
|
||||
public String get(final CharSequence group, final CharSequence key) {
|
||||
readLock.lock();
|
||||
try {
|
||||
final LinkedHashMap<String, String> map = this.get(StrUtil.emptyIfNull(group));
|
||||
if (MapUtil.isNotEmpty(map)) {
|
||||
return map.get(key);
|
||||
return map.get(StrUtil.str(key));
|
||||
}
|
||||
} finally {
|
||||
readLock.unlock();
|
||||
|
@@ -4,11 +4,8 @@ import cn.hutool.core.collection.ListUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.core.io.resource.ClassPathResource;
|
||||
import cn.hutool.core.io.resource.FileResource;
|
||||
import cn.hutool.core.io.resource.Resource;
|
||||
import cn.hutool.core.io.resource.ResourceUtil;
|
||||
import cn.hutool.core.io.resource.UrlResource;
|
||||
import cn.hutool.core.io.watch.SimpleWatcher;
|
||||
import cn.hutool.core.io.watch.WatchMonitor;
|
||||
import cn.hutool.core.io.watch.WatchUtil;
|
||||
@@ -85,6 +82,11 @@ public class Setting extends AbsSetting implements Map<String, String> {
|
||||
*/
|
||||
protected Resource resource;
|
||||
|
||||
/**
|
||||
* 当获取key对应值为{@code null}时是否打印debug日志提示用户,默认{@code false}
|
||||
*/
|
||||
private boolean logIfNull;
|
||||
|
||||
private SettingLoader settingLoader;
|
||||
private WatchMonitor watchMonitor;
|
||||
|
||||
@@ -137,32 +139,7 @@ public class Setting extends AbsSetting implements Map<String, String> {
|
||||
*/
|
||||
public Setting(final File configFile, final Charset charset, final boolean isUseVariable) {
|
||||
Assert.notNull(configFile, "Null setting file define!");
|
||||
this.init(new FileResource(configFile), charset, isUseVariable);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造,相对于classes读取文件
|
||||
*
|
||||
* @param path 相对ClassPath路径或绝对路径
|
||||
* @param clazz 基准类
|
||||
* @param charset 字符集
|
||||
* @param isUseVariable 是否使用变量
|
||||
*/
|
||||
public Setting(final String path, final Class<?> clazz, final Charset charset, final boolean isUseVariable) {
|
||||
Assert.notBlank(path, "Blank setting path !");
|
||||
this.init(new ClassPathResource(path, clazz), charset, isUseVariable);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造
|
||||
*
|
||||
* @param url 设定文件的URL
|
||||
* @param charset 字符集
|
||||
* @param isUseVariable 是否使用变量
|
||||
*/
|
||||
public Setting(final URL url, final Charset charset, final boolean isUseVariable) {
|
||||
Assert.notNull(url, "Null setting url define!");
|
||||
this.init(new UrlResource(url), charset, isUseVariable);
|
||||
this.init(ResourceUtil.getResource(configFile), charset, isUseVariable);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -278,26 +255,12 @@ public class Setting extends AbsSetting implements Map<String, String> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getByGroup(final String key, final String group) {
|
||||
return this.groupedMap.get(group, key);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取并删除键值对,当指定键对应值非空时,返回并删除这个值,后边的键对应的值不再查找
|
||||
*
|
||||
* @param keys 键列表,常用于别名
|
||||
* @return 值
|
||||
* @since 3.1.2
|
||||
*/
|
||||
public Object getAndRemove(final String... keys) {
|
||||
Object value = null;
|
||||
for (final String key : keys) {
|
||||
value = remove(key);
|
||||
if (null != value) {
|
||||
break;
|
||||
}
|
||||
public Object getObjByGroup(final CharSequence key, final CharSequence group, final Object defaultValue) {
|
||||
final String result = this.groupedMap.get(group, key);
|
||||
if (result == null && logIfNull) {
|
||||
StaticLog.debug("No key [{}] in group [{}] !", key, group);
|
||||
}
|
||||
return value;
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -307,7 +270,7 @@ public class Setting extends AbsSetting implements Map<String, String> {
|
||||
* @return 字符串值
|
||||
* @since 3.1.2
|
||||
*/
|
||||
public String getAndRemoveStr(final String... keys) {
|
||||
public String getAndRemove(final String... keys) {
|
||||
String value = null;
|
||||
for (final String key : keys) {
|
||||
value = remove(key);
|
||||
@@ -467,6 +430,16 @@ public class Setting extends AbsSetting implements Map<String, String> {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置当获取key对应值为{@code null}时是否打印debug日志提示用户
|
||||
* @param logIfNull 当获取key对应值为{@code null}时是否打印debug日志提示用户
|
||||
* @return this
|
||||
*/
|
||||
public Setting setLogIfNull(final boolean logIfNull){
|
||||
this.logIfNull = logIfNull;
|
||||
return this;
|
||||
}
|
||||
|
||||
// ------------------------------------------------- Map interface with group
|
||||
|
||||
/**
|
||||
@@ -501,17 +474,6 @@ public class Setting extends AbsSetting implements Map<String, String> {
|
||||
return this.groupedMap.containsValue(group, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取分组对应的值,如果分组不存在或者值不存在则返回null
|
||||
*
|
||||
* @param group 分组
|
||||
* @param key 键
|
||||
* @return 值,如果分组不存在或者值不存在则返回null
|
||||
*/
|
||||
public String get(final String group, final String key) {
|
||||
return this.groupedMap.get(group, key);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将键值对加入到对应分组中
|
||||
*
|
||||
@@ -666,7 +628,7 @@ public class Setting extends AbsSetting implements Map<String, String> {
|
||||
*/
|
||||
@Override
|
||||
public String get(final Object key) {
|
||||
return this.groupedMap.get(DEFAULT_GROUP, Convert.toStr(key));
|
||||
return getStr((String)key);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -689,7 +651,7 @@ public class Setting extends AbsSetting implements Map<String, String> {
|
||||
*/
|
||||
@Override
|
||||
public String remove(final Object key) {
|
||||
return this.groupedMap.remove(DEFAULT_GROUP, Convert.toStr(key));
|
||||
return remove(DEFAULT_GROUP, key);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -1,12 +1,9 @@
|
||||
package cn.hutool.setting.dialect;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.io.IORuntimeException;
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.core.io.resource.ClassPathResource;
|
||||
import cn.hutool.core.io.resource.FileResource;
|
||||
import cn.hutool.core.io.resource.Resource;
|
||||
import cn.hutool.core.io.resource.ResourceUtil;
|
||||
import cn.hutool.core.io.resource.UrlResource;
|
||||
@@ -14,26 +11,22 @@ import cn.hutool.core.io.watch.SimpleWatcher;
|
||||
import cn.hutool.core.io.watch.WatchMonitor;
|
||||
import cn.hutool.core.io.watch.WatchUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.lang.getter.BasicTypeGetter;
|
||||
import cn.hutool.core.lang.getter.OptBasicTypeGetter;
|
||||
import cn.hutool.core.lang.getter.TypeGetter;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.reflect.ConstructorUtil;
|
||||
import cn.hutool.core.text.StrUtil;
|
||||
import cn.hutool.core.util.CharsetUtil;
|
||||
import cn.hutool.core.util.ObjUtil;
|
||||
import cn.hutool.log.StaticLog;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.net.URL;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.WatchEvent;
|
||||
import java.util.Date;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
@@ -41,7 +34,7 @@ import java.util.Properties;
|
||||
*
|
||||
* @author loolly
|
||||
*/
|
||||
public final class Props extends Properties implements BasicTypeGetter<String>, OptBasicTypeGetter<String> {
|
||||
public final class Props extends Properties implements TypeGetter<CharSequence> {
|
||||
private static final long serialVersionUID = 1935981579709590740L;
|
||||
|
||||
/**
|
||||
@@ -78,29 +71,18 @@ public final class Props extends Properties implements BasicTypeGetter<String>,
|
||||
* @param resource 资源(相对Classpath的路径)
|
||||
* @return Props
|
||||
*/
|
||||
public static Props getProp(final String resource) {
|
||||
public static Props of(final String resource) {
|
||||
return new Props(resource);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得Classpath下的Properties文件
|
||||
*
|
||||
* @param resource 资源(相对Classpath的路径)
|
||||
* @param charsetName 字符集
|
||||
* @return Properties
|
||||
*/
|
||||
public static Props getProp(final String resource, final String charsetName) {
|
||||
return new Props(resource, charsetName);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得Classpath下的Properties文件
|
||||
*
|
||||
* @param resource 资源(相对Classpath的路径)
|
||||
* @param charset 字符集
|
||||
* @param charset 自定义编码
|
||||
* @return Properties
|
||||
*/
|
||||
public static Props getProp(final String resource, final Charset charset) {
|
||||
public static Props of(final String resource, final Charset charset) {
|
||||
return new Props(resource, charset);
|
||||
}
|
||||
|
||||
@@ -118,24 +100,14 @@ public final class Props extends Properties implements BasicTypeGetter<String>,
|
||||
* @param path 配置文件路径,相对于ClassPath,或者使用绝对路径
|
||||
*/
|
||||
public Props(final String path) {
|
||||
this(path, CharsetUtil.ISO_8859_1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造,使用相对于Class文件根目录的相对路径
|
||||
*
|
||||
* @param path 相对或绝对路径
|
||||
* @param charsetName 字符集
|
||||
*/
|
||||
public Props(final String path, final String charsetName) {
|
||||
this(path, CharsetUtil.charset(charsetName));
|
||||
this(path, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造,使用相对于Class文件根目录的相对路径
|
||||
*
|
||||
* @param path 相对或绝对路径
|
||||
* @param charset 字符集
|
||||
* @param charset 自定义编码
|
||||
*/
|
||||
public Props(final String path, final Charset charset) {
|
||||
Assert.notBlank(path, "Blank properties file path !");
|
||||
@@ -151,98 +123,35 @@ public final class Props extends Properties implements BasicTypeGetter<String>,
|
||||
* @param propertiesFile 配置文件对象
|
||||
*/
|
||||
public Props(final File propertiesFile) {
|
||||
this(propertiesFile, StandardCharsets.ISO_8859_1);
|
||||
this(propertiesFile, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造
|
||||
*
|
||||
* @param propertiesFile 配置文件对象
|
||||
* @param charsetName 字符集
|
||||
*/
|
||||
public Props(final File propertiesFile, final String charsetName) {
|
||||
this(propertiesFile, Charset.forName(charsetName));
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造
|
||||
*
|
||||
* @param propertiesFile 配置文件对象
|
||||
* @param charset 字符集
|
||||
* @param charset 自定义编码
|
||||
*/
|
||||
public Props(final File propertiesFile, final Charset charset) {
|
||||
Assert.notNull(propertiesFile, "Null properties file!");
|
||||
this.charset = charset;
|
||||
this.load(new FileResource(propertiesFile));
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造,相对于classes读取文件
|
||||
*
|
||||
* @param path 相对路径
|
||||
* @param clazz 基准类
|
||||
*/
|
||||
public Props(final String path, final Class<?> clazz) {
|
||||
this(path, clazz, CharsetUtil.NAME_ISO_8859_1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造,相对于classes读取文件
|
||||
*
|
||||
* @param path 相对路径
|
||||
* @param clazz 基准类
|
||||
* @param charsetName 字符集
|
||||
*/
|
||||
public Props(final String path, final Class<?> clazz, final String charsetName) {
|
||||
this(path, clazz, CharsetUtil.charset(charsetName));
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造,相对于classes读取文件
|
||||
*
|
||||
* @param path 相对路径
|
||||
* @param clazz 基准类
|
||||
* @param charset 字符集
|
||||
*/
|
||||
public Props(final String path, final Class<?> clazz, final Charset charset) {
|
||||
Assert.notBlank(path, "Blank properties file path !");
|
||||
if (null != charset) {
|
||||
this.charset = charset;
|
||||
}
|
||||
this.load(new ClassPathResource(path, clazz));
|
||||
this.load(ResourceUtil.getResource(propertiesFile));
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造,使用URL读取
|
||||
*
|
||||
* @param propertiesUrl 属性文件路径
|
||||
* @param resource {@link Resource}
|
||||
* @param charset 自定义编码
|
||||
*/
|
||||
public Props(final URL propertiesUrl) {
|
||||
this(propertiesUrl, StandardCharsets.ISO_8859_1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造,使用URL读取
|
||||
*
|
||||
* @param propertiesUrl 属性文件路径
|
||||
* @param charsetName 字符集
|
||||
*/
|
||||
public Props(final URL propertiesUrl, final String charsetName) {
|
||||
this(propertiesUrl, CharsetUtil.charset(charsetName));
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造,使用URL读取
|
||||
*
|
||||
* @param propertiesUrl 属性文件路径
|
||||
* @param charset 字符集
|
||||
*/
|
||||
public Props(final URL propertiesUrl, final Charset charset) {
|
||||
Assert.notNull(propertiesUrl, "Null properties URL !");
|
||||
public Props(final Resource resource, final Charset charset) {
|
||||
Assert.notNull(resource, "Null properties URL !");
|
||||
if (null != charset) {
|
||||
this.charset = charset;
|
||||
}
|
||||
this.load(propertiesUrl);
|
||||
this.load(resource);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -316,167 +225,9 @@ public final class Props extends Properties implements BasicTypeGetter<String>,
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------- Get start
|
||||
@Override
|
||||
public Object getObj(final String key, final Object defaultValue) {
|
||||
return getStr(key, null == defaultValue ? null : defaultValue.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getObj(final String key) {
|
||||
return getObj(key, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStr(final String key, final String defaultValue) {
|
||||
return super.getProperty(key, defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStr(final String key) {
|
||||
return super.getProperty(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getInt(final String key, final Integer defaultValue) {
|
||||
return Convert.toInt(getStr(key), defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getInt(final String key) {
|
||||
return getInt(key, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean getBool(final String key, final Boolean defaultValue) {
|
||||
return Convert.toBool(getStr(key), defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean getBool(final String key) {
|
||||
return getBool(key, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getLong(final String key, final Long defaultValue) {
|
||||
return Convert.toLong(getStr(key), defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getLong(final String key) {
|
||||
return getLong(key, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Character getChar(final String key, final Character defaultValue) {
|
||||
final String value = getStr(key);
|
||||
if (StrUtil.isBlank(value)) {
|
||||
return defaultValue;
|
||||
}
|
||||
return value.charAt(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Character getChar(final String key) {
|
||||
return getChar(key, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Float getFloat(final String key) {
|
||||
return getFloat(key, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Float getFloat(final String key, final Float defaultValue) {
|
||||
return Convert.toFloat(getStr(key), defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double getDouble(final String key, final Double defaultValue) throws NumberFormatException {
|
||||
return Convert.toDouble(getStr(key), defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double getDouble(final String key) throws NumberFormatException {
|
||||
return getDouble(key, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Short getShort(final String key, final Short defaultValue) {
|
||||
return Convert.toShort(getStr(key), defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Short getShort(final String key) {
|
||||
return getShort(key, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Byte getByte(final String key, final Byte defaultValue) {
|
||||
return Convert.toByte(getStr(key), defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Byte getByte(final String key) {
|
||||
return getByte(key, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BigDecimal getBigDecimal(final String key, final BigDecimal defaultValue) {
|
||||
final String valueStr = getStr(key);
|
||||
if (StrUtil.isBlank(valueStr)) {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
try {
|
||||
return new BigDecimal(valueStr);
|
||||
} catch (final Exception e) {
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public BigDecimal getBigDecimal(final String key) {
|
||||
return getBigDecimal(key, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BigInteger getBigInteger(final String key, final BigInteger defaultValue) {
|
||||
final String valueStr = getStr(key);
|
||||
if (StrUtil.isBlank(valueStr)) {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
try {
|
||||
return new BigInteger(valueStr);
|
||||
} catch (final Exception e) {
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public BigInteger getBigInteger(final String key) {
|
||||
return getBigInteger(key, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <E extends Enum<E>> E getEnum(final Class<E> clazz, final String key, final E defaultValue) {
|
||||
return Convert.toEnum(clazz, getStr(key), defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <E extends Enum<E>> E getEnum(final Class<E> clazz, final String key) {
|
||||
return getEnum(clazz, key, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Date getDate(final String key, final Date defaultValue) {
|
||||
return Convert.toDate(getStr(key), defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Date getDate(final String key) {
|
||||
return getDate(key, null);
|
||||
public Object getObj(final CharSequence key, final Object defaultValue) {
|
||||
return ObjUtil.defaultIfNull(getProperty(StrUtil.str(key)), defaultValue);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -1,8 +1,6 @@
|
||||
package cn.hutool.setting;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.log.LogFactory;
|
||||
import cn.hutool.log.dialect.console.ConsoleLogFactory;
|
||||
import cn.hutool.setting.dialect.Props;
|
||||
import lombok.Data;
|
||||
import org.junit.Assert;
|
||||
@@ -16,7 +14,7 @@ import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* Setting单元测试
|
||||
* Props单元测试
|
||||
*
|
||||
* @author Looly
|
||||
*
|
||||
@@ -25,7 +23,7 @@ public class PropsTest {
|
||||
|
||||
@Before
|
||||
public void init() {
|
||||
LogFactory.setCurrentLogFactory(ConsoleLogFactory.class);
|
||||
//LogFactory.setCurrentLogFactory(ConsoleLogFactory.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -53,7 +51,7 @@ public class PropsTest {
|
||||
|
||||
@Test
|
||||
public void toBeanTest() {
|
||||
final Props props = Props.getProp("to_bean_test.properties");
|
||||
final Props props = Props.of("to_bean_test.properties");
|
||||
|
||||
final ConfigProperties cfg = props.toBean(ConfigProperties.class, "mail");
|
||||
Assert.assertEquals("mailer@mail.com", cfg.getHost());
|
||||
|
@@ -17,15 +17,15 @@ public class SettingTest {
|
||||
//noinspection MismatchedQueryAndUpdateOfCollection
|
||||
final Setting setting = new Setting("test.setting", true);
|
||||
|
||||
final String driver = setting.getByGroup("driver", "demo");
|
||||
final String driver = setting.getStrByGroup("driver", "demo");
|
||||
Assert.assertEquals("com.mysql.jdbc.Driver", driver);
|
||||
|
||||
//本分组变量替换
|
||||
final String user = setting.getByGroup("user", "demo");
|
||||
final String user = setting.getStrByGroup("user", "demo");
|
||||
Assert.assertEquals("rootcom.mysql.jdbc.Driver", user);
|
||||
|
||||
//跨分组变量替换
|
||||
final String user2 = setting.getByGroup("user2", "demo");
|
||||
final String user2 = setting.getStrByGroup("user2", "demo");
|
||||
Assert.assertEquals("rootcom.mysql.jdbc.Driver", user2);
|
||||
|
||||
//默认值测试
|
||||
@@ -50,9 +50,9 @@ public class SettingTest {
|
||||
setting.setByGroup("user", "group3", "root3");
|
||||
setting.set("user", "root4");
|
||||
|
||||
Assert.assertEquals("root", setting.getByGroup("user", "group1"));
|
||||
Assert.assertEquals("root2", setting.getByGroup("user", "group2"));
|
||||
Assert.assertEquals("root3", setting.getByGroup("user", "group3"));
|
||||
Assert.assertEquals("root", setting.getStrByGroup("user", "group1"));
|
||||
Assert.assertEquals("root2", setting.getStrByGroup("user", "group2"));
|
||||
Assert.assertEquals("root3", setting.getStrByGroup("user", "group3"));
|
||||
Assert.assertEquals("root4", setting.get("user"));
|
||||
}
|
||||
|
||||
|
@@ -7,13 +7,13 @@ public class SettingUtilTest {
|
||||
|
||||
@Test
|
||||
public void getTest() {
|
||||
final String driver = SettingUtil.get("test").get("demo", "driver");
|
||||
final String driver = SettingUtil.get("test").getStrByGroup("driver", "demo");
|
||||
Assert.assertEquals("com.mysql.jdbc.Driver", driver);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getTest2() {
|
||||
final String driver = SettingUtil.get("example/example").get("demo", "key");
|
||||
final String driver = SettingUtil.get("example/example").getStrByGroup("key", "demo");
|
||||
Assert.assertEquals("value", driver);
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ public class SettingUtilTest {
|
||||
public void getFirstFoundTest() {
|
||||
//noinspection ConstantConditions
|
||||
final String driver = SettingUtil.getFirstFound("test2", "test")
|
||||
.get("demo", "driver");
|
||||
.getStrByGroup("driver", "demo");
|
||||
Assert.assertEquals("com.mysql.jdbc.Driver", driver);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user