深入理解Spring Cloud与微服务构建(第2版)
上QQ阅读APP看书,第一时间看更新

4.3.2 将配置文件的属性赋给实体类

当有很多配置属性时,如果逐个地读取属性会非常麻烦。通常的做法会把这些属性名作为变量名来创建一个JavaBean的变量,并将属性值赋给JavaBean变量的值。

在配置文件application.yml中添加如下属性:

my:
 name: forezp
 age: 12
 number:  ${random.int}
 uuid : ${random.uuid}
 max: ${random.int(10)}
 value: ${random.value}
 greeting: hi,i'm  ${my.name}

其中,配置文件中用到了${random},它可以用来生成各种不同类型的随机值。random.int随机生成一个int类型的值,random.uuid随机生成一个uuid,random.value随机生成一个值,random.int(10)随机生成一个小于10的整数。

怎么将这些属性赋给一个JavaBean呢?创建一个JavaBean,其代码清单如下:

@ConfigurationProperties(prefix = "my")
@Component
public class ConfigBean {
   private String name;
   private int age;
   private int number;
   private String uuid;
   private int max;
   private String value;
   private String greeting;
   …//省略了getter setter
}

在上面的代码中,在ConfigBean类上加一个注解@ConfigurationProperties,表明该类为配置属性类,并加上配置的prefix,例如本案例的“my”。另外需要在ConfigBean类上加@Component注解,Spring Boot在启动时通过包扫描将该类作为一个Bean注入IoC容器中。

创建一个Controller,读取ConfigBean类的属性。在Controller类上,加@EnableConfigurationProperties注解,并指明ConfigBean类,其代码清单如下:

@RestController
@EnableConfigurationProperties({ConfigBean.class})
public class LucyController {
   @Autowired
   ConfigBean configBean;
   @RequestMapping(value = "/lucy")
   public String miya(){
      return configBean.getGreeting()+"-"+configBean.getName()+"-"+ 
configBean.getUuid()+ "-"+configBean.getMax();
   }
}

启动Spring Boot工程,在浏览器上访问“http://localhost:8080/lucy”,浏览器会显示从配置文件读取的属性。