Spring boot 怎么从配置文件中取值?

107 阅读1分钟

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}