配置信息读取
a. Environment 读取
所有的配置信息,都会加载到Environment实体中,因此我们可以通过这个对象来获取系统的配置,通过这种方式不仅可以获取application.yml配置信息,还可以获取更多的系统信息
使用姿势如下:
@RestController
public class DemoController {
@Autowired
private Environment environment;
@GetMapping(path = "show")
public String show() {
Map<String, String> result = new HashMap<>(4);
result.put("env", environment.getProperty("server.port"));
return JSON.toJSONString(result);
}
}
b. @Value 注解方式
@Value注解可以将配置信息注入到Bean的属性,也是比较常见的使用方式,但有几点需要额外注意
如果配置信息不存在会怎样?
配置冲突了会怎样(即多个配置文件中有同一个key时)?
使用方式如下,主要是通过 ${},大括号内为配置的Key;如果配置不存在时,给一个默认值时,可以用冒号分割,后面为具体的值
@RestController
public class DemoController {
// 配置必须存在,且获取的是配置名为 app.demo.val 的配置信息
@Value("${app.demo.val}")
private String autoInject;
// 配置app.demo.not不存在时,不抛异常,给一个默认值data
@Value("${app.demo.not:dada}")
private String notExists;
@GetMapping(path = "show")
public String show() {
Map<String, String> result = new HashMap<>(4);
result.put("autoInject", autoInject);
result.put("not", notExists);
return JSON.toJSONString(result);
}
}
c. 对象映射方式
上面的两种方式对于某几个特别的配置来说,一个一个的写还好,如果配置特别多时,每一个都去这么玩,估计会敲的键盘原地爆炸了,当然这么不友好的事情,怎么能忍!因此就有了下面这种使用方式
@Data
@Component
@ConfigurationProperties(prefix = "app.proper")
public class ProperBean {
private String key;
private Integer id;
private String value;
}
上面的写法,含义是将配置文件中配置 app.proper.key, app.proper.id, app.proper.value三个配置的值,赋值给上面的bean