以前通常会使用@Value来将application.properties的值注入类别变数:
application.yml
limit: speed: 100
class Car
@Dataclass Car{ String model; @Value(speed.max) String speed;}
后来发现有个@ConfigurationProperties的注解可以很乾净地做到注入Collection变数:
application.yml
nissan: cars: - model: sentra speed: 100 - model: GTR speed: 300
CarShop
@ConfigurationProperties(prefix = "nissan")class CarShop{ List<Car> cars; public List<Car> getCars(){ return cars; } public void setCars(List<Car> cars){ this.cars = cars; }}
只要这样设定后,SpringBoot就会自动把application.yml中的nissan.cars注入到CarShop的cars类别变数。要做到这件事有几个条件:
@ConfigurationProperties的prefix参数与application.yml的prefix对齐prefix后一个变数名称与类别变数名称对齐Collection的泛型型态变数名称与其他application.yml变数名称对齐