欢迎大家来到IT世界,在知识的湖畔探索吧!
一、System.getProperties() 获取系统环境变量
在工作中经常遇到获取系统环境变量,如获取当前资源路径、获取当前用户名等等,那如何获取所有的系统变量呢?通过System.getProperties()就可以了。
// 获取当前资源路径
System.getProperty(“user.dir”);
// 获取当前用户名
System.getProperty(“user.name”);
二、@Value注解支持属性值注入
在 Spring 组件中使用 @Value 注解的方式,可以很方便的读取 properties 文件的配置值。
@Value的属性值注入有两类:
- ${ property : default_value }
- #{ obj.property? : default_value }
第一个注入的是外部参数对应的property,第二个则是SpEL表达式对应的内容。
那个 default_value,就是前面的值为空时的默认值。注意二者的不同。
@Value 注解的使用场景很多,包括:
- 在声明的变量中使用;
- 在setter方法中;
- 普通方法和构造方法中;
下面看看几个简单的示例:
@Value(“${username:rickie}”)
private String userName2;
如果username 没有设置值,userName2变量值将会设置为默认值rickie。
@Value(“${user.name:tom}”)
private String userName;
读取系统环境变量user.name,一般而言,系统环境变量user.name 都会有值,因此userName 变量将会设置为系统环境变量的值(用户名)。
@Value(“${user.age:25}”)
private Integer age;
给包装类型Integer或者简单类型int 设置默认值。
@Value(“${some.key:one,two,three}”)
private String[] stringArrayWithDefaults;
@Value(“${some.key:1,2,3}”)
private int[] intArrayWithDefaults;
数组的默认值可以使用逗号分割。
@Value(“#{systemProperties[‘user.name’] ?: ‘default username’}”)
private String spelWithDefaultValue;
使用 Spring Expression Language (SpEL) 设置默认值。
上面的代码表示在systemProperties中,如果没有设置 user.name 的值,my default system property value 会被设置成默认值。
使用 Spring @Value 为属性设置默认值。在项目中,提供合理的默认值,在大多情况下不用任何配置,就能直接使用。达到零配置的效果,降低被人使用的门槛。简化新Spring应用的搭建、开发、部署过程。
三、完整代码示例
下面的代码,整合了通过System.getProperties()获取系统环境变量和@Value注解注入属性值。
@RestController
public class TestController {
@Value(“${user.name:tom}”)
private String userName;
@Value(“${username:rickie}”)
private String userName2;
@Value(“${user.age:25}”)
private Integer age;
@Value(“#{systemProperties[‘user.name’] ?: ‘my default system property value’}”)
private String spelWithDefaultValue;
@RequestMapping(“/user”)
public String simple() {
return “Hello ” + userName + “, ” + age + “!<br />”
+ “userName2: ” + userName2 + “<br />”
+ spelWithDefaultValue + “<br />”
+ getProperties();
}
private String getProperties() {
StringBuilder sb = new StringBuilder();
Properties properties = System.getProperties();
Iterator it = properties.entrySet().iterator();
while(it.hasNext()){
Map.Entry entry=(Map.Entry)it.next();
Object key = entry.getKey();
Object value = entry.getValue();
sb.append(key +”: “+value + “<br />”);
}
return sb.toString();
}
}
输出结果:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/36356.html