在spring中,代码里获取spring加载的properties文件中值的方法

平时用spring的时候,配置的值多数情况都是直接在配置文件中注入给管理的类了,比如数据库连接池,数据库,缓存等,不需要再在代码中获取值做相应的处理。今天遇到这种情况,需要在代码中判断某个值是否为空,如果不为空则解析其值并根据解析的值给HTTPclient加上代理,否则则不加。
首先是使用spring的placeholder加载所有的properties文件
然后是常见的第一种注入配置值的方法:
使用配置文件管理需要注入的实例,在初始化实例的时候,在配置文件中使用property参数注入相应的值,入
<bean id=”cacheManager” class=”cn.outofmemory.util.MemCacheManager” init-method=”init”>
<property name=”nodeList” value=”${memcache.nodelist}”/>
</bean>
这里的${memcache.nodelist}就是properties文件中key值为memcache.nodelist的配置值。
但是这样做会打乱原有的使用注解管理bean的布局,显得比较混乱,而且如果改动类还需要同时改动spring的配置文件。
第二种:
1、引入命名空间:
xmlns:util=”https://www.springframework.org/schema/util”
xsi:schemaLocation=”https://www.springframework.org/schema/util
https://www.springframework.org/schema/util/spring-util-3.0.xsd”
内容中写入
<util:properties id=”propertiesReader” location=”classpath:test.properties” />
2、在类中需要注入的属性实现 setter 和 getter 方法。
3、在 setter 方法前(或者该属性声明位置),添加 @Value 注解
@Value(“#{propertiesReader[propertiesName]}”)
propertiesName 为 properties 文件中的键。这样,在容器启动过程中, Spring 将自动注入值。
第三种:
实现一个 PropertyPlaceholderConfigurer 扩展的类,在这个类中重写protected void processProperties方法,在方法体中,将传入的
Properties props的值全都重新复制一份给当前方法的静态变量,这样就可以直接使用该静态变量获取系统加载的参数了。示例如下:
private static Map<String, String> ctxPropertiesMap;
@Override
protected void processProperties(
ConfigurableListableBeanFactory beanFactoryToProcess,
Properties props) throws BeansException {
super.processProperties(beanFactoryToProcess, props);
ctxPropertiesMap = new HashMap<String, String>();
for (Object key : props.keySet()) {
String keyStr = key.toString();
String value = props.getProperty(keyStr);
ctxPropertiesMap.put(keyStr, value);
}
}
public static String getContextProperty(String name) {
return ctxPropertiesMap.get(name);
}
第四种:
很简单,只要是使用PropertyPlaceholderConfigurer来管理加载了所有的配置文件,那么我们在某个spring管理的实例里的属性上,
在某个set方法上可以用@Value(“${db.driverclass}”)来完成注入,也可以在成员变量上注入。
例子:
例子代码如:
@Service
public class DatabaseInfo {
@Value(“${db.driverclass}”)①
private String driverClass;
//也可以在这里注入
@Value(“${db.driverclass}”)②
private void setDriverClass(String dc) {
this.driverClass = dc;
}
}
参考文献
《https://blog.csdn.net/achilles12345/article/details/38614387》
《https://jackyrong.iteye.com/blog/1330946》

linux系统下rz/sz 命令安装使用说明

对于经常使用Linux系统的人员来说,少不了将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / sz命令很方便的帮我们实现了这个功能,但是很多Linux系统初始并没有这两个命令。今天,我们就简单的讲解一下如何安装和使用rz、sz命令。

1.软件安装

(1)编译安装

root 账号登陆后,依次执行以下命令:

1 cd /tmp
2 wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz
3 tar zxvf lrzsz-0.12.20.tar.gz && cd lrzsz-0.12.20
4 ./configure && make && make install

上面安装过程默认把lsz和lrz安装到了/usr/local/bin/目录下,现在我们并不能直接使用,下面创建软链接,并命名为rz/sz:

1 cd /usr/bin
2 ln -s /usr/local/bin/lrz rz
3 ln -s /usr/local/bin/lsz sz

(2)yum安装

root 账号登陆后执行以下命令:

1 yum install -y lrzsz

2.使用说明

sz命令发送文件到本地:

1 # sz filename

rz命令本地上传文件到服务器:

1 # rz

执行该命令后,在弹出框中选择要上传的文件即可。
说明:打开SecureCRT软件 -> Options -> session options -> X/Y/Zmodem 下可以设置上传和下载的目录。
参看文档地址《https://www.lihuai.net/linux/commands/558.html》