当我们需要在application.yml中配置一些额外的属性的时候,如:
servers:
ip-address: 192.168.1.2
port: 8081
timeout: -1
比较好的方法是:将其封装成一个实体类,然后使实体类自动引用配置文件中的属性,这时候就需要用到@ConfigurationProperties注解。封装的实体类如下:
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
private String ipAddress;
private int port;
private long timeout;
}
说明:首先要使该类成为springboot管控的bean,因此要加上@Component注解,然后加上@ConfigurationProperties注解并添加prefix,以此告诉此类要引用哪些配置属性。
这样我们就完成了该类的属性绑定,如下:
@SpringBootTest
class SpringbootApplicationTests {
@Autowired
private ServerConfig serverConfig;
@Test
void test1() {
System.out.println(serverConfig.getIpAddress());
System.out.println(serverConfig.getPort());
System.out.println(serverConfig.getTimeout());
}
}
最后说明:
1、@ConfigurationProperties注解不仅可以用于自定义bean的属性绑定,还可以用于第三方bean的自动绑定。
2、解除@ConfigurationProperties注释警告,如图:
添加如下依赖即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
3、@ConfigurationProperties绑定属性支持属性名宽松绑定,如上文配置中的ip-address属性名依然可以绑定到自定义实体类中的属性ipAddress中,但是@Value注解却不支持宽松绑定