最近在解读公司已有的微服务架构时,发现一个挺配有趣的配置,该配置型如下:
user:
user-name: ${username}
age: ${age}
而在常规的springboot配置中,我们最常见的配置参数诸如是
user:
user-name: 张三
age: 10
而通过${username}和${age}的配置方式,如果没通过特殊处理,不出意外的话,打印的结果是字符串${username}和${age},这种结果显然不符合预期。那如何通过${username}和${age}打印出诸如username:张三,age:10效果呢?接下介绍实现这一功能主角:System.setProperty
System.setProperty
setProperty (String prop, String value); 1、 设置指定键对值的系统属性,其中prop:系统属性的名称,value:系统属性的值。注:这里的system,系统指的是 JRE (runtime)system,不是指 OS。 2、System.setProperty相当于一个静态变量,存在内存里面,可以在项目的任何一个地方,通过System.getProperty("变量")来获得
public class ActivitiStart extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// TODO Auto-generated method stub
return builder;
}
public static void main(String[] args) {
System.setProperty("username", "张三");
System.setProperty("age", "10");
new SpringApplicationBuilder(ActivitiStart.class).run(args);
}
}
@Component
public class User {
@Value("${user.user-name}")
private String username;
@Value("${age}")
private String age;
@PostConstruct
public void init() {
System.out.println(this);
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "User [username=" + username + ", age=" + age + "]";
}
}
User [username=张三, age=10]
参数配置在数据库中,多个服务使用同一份配置,明了的说就是如果公司有自研配置中心的需求,可以考虑一下setProperty,通过setProperty与el占位符结合,搭配@Value