yaml文件:
properties:
p1: 11
p2: Dshy
my-obj:
name: Dshy
age: 23
取单值
@RestController
@RequestMapping("/hello")
@Slf4j
public class HelloController {
@Value("${properties.p1}")
Integer p1;
@Value("${properties.p2}")
String p2;
@GetMapping("/hi")
public String hello() {
log.info(String.valueOf(p1));
log.info(String.valueOf(p2));
return "hello springboot!";
}
}
取单值比较简单,直接使用 @Value()注解就行,注解里面填上yaml中你想取的值,要是多级的话用 . 来取。
结果
2023-06-02 21:29:05.653 INFO 77220 --- [nio-8080-exec-1] c.hss.spring.controller.HelloController : 11
2023-06-02 21:29:05.653 INFO 77220 --- [nio-8080-exec-1] c.hss.spring.controller.HelloController : Dshy
封装成对象
其实还有一个将一个yaml文件封装为一个对象的方法,但是用的较少,这里直接纪录一下将指定的部分封装成对象的方法。
创建要被封装的对象
@Component
@Data
@ConfigurationProperties(prefix = "my-obj")
public class User {
private String name;
private Integer age;
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
注意这里的@ConfigurationProperties(prefix = "my-obj")注解,prefix要和yaml文件中你要封装信息的前缀相匹配,然后其中的熟悉 name、age也要一一匹配。
此外,需要将这个对象交给spring 管理,所以要加上@Component注解。
封装成对象
@RestController
@RequestMapping("/hello")
@Slf4j
public class HelloController {
@Value("${properties.p1}")
Integer p1;
@Value("${properties.p2}")
String p2;
@Autowired
User user;
@GetMapping("/hi")
public String hello() {
log.info(String.valueOf(p1));
log.info(String.valueOf(p2));
log.info(user.toString());
return "hello springboot!";
}
}
结果
2023-06-02 21:29:05.653 INFO 77220 --- [nio-8080-exec-1] c.hss.spring.controller.HelloController : 11
2023-06-02 21:29:05.653 INFO 77220 --- [nio-8080-exec-1] c.hss.spring.controller.HelloController : Dshy
2023-06-02 21:29:05.653 INFO 77220 --- [nio-8080-exec-1] c.hss.spring.controller.HelloController : User{name='Dshy', age=23}