参考
SpringBoot @ConfigurationProperties详解 - 腾讯云开发者社区-腾讯云 (tencent.com)
示例
1 2 3 4 5 6
| @Data @Component("portalConfig") @ConfigurationProperties(prefix = "portal-config") public class PortalConfig { private Boolean esEnable = false; }
|
1 2
| portal-config: esEnable: true
|
一个简单的例子
@ConfigurationProperties需要和@Configuration配合使用,我们通常在一个POJO里面进行配置:
1 2 3 4 5 6 7 8 9
| @Data @Configuration @ConfigurationProperties(prefix = "mail") public class ConfigProperties {
private String hostName; private int port; private String from; }
|
上面的例子将会读取properties文件中所有以mail开头的属性,并和bean中的字段进行匹配:
1 2 3 4
| #Simple properties mail.hostname=host@mail.com mail.port=9000 mail.from=mailer@mail.com
|
Spring的属性名字匹配支持很多格式,如下所示所有的格式都可以和hostName进行匹配:
1 2 3 4 5
| mail.hostName mail.hostname mail.host_name mail.host-name mail.HOST_NAME
|
EnableConfigurationProperties
如果你不想使用@Configuration, 那么需要在@EnableConfigurationProperties注解中手动导入配置文件如下:
1 2 3 4 5 6 7
| @SpringBootApplication @EnableConfigurationProperties(ConfigProperties.class) public class ConfigPropApp { public static void main(String[] args) { SpringApplication.run(ConfigPropApp.class,args); } }
|
我们也可以在@ConfigurationPropertiesScan中指定Config文件的路径:
1 2 3 4 5 6 7
| @SpringBootApplication @ConfigurationPropertiesScan("com.flydean.config") public class ConfigPropApp { public static void main(String[] args) { SpringApplication.run(ConfigPropApp.class,args); } }
|
这样的话程序只会在com.flydean.config包中查找config文件。
属性嵌套
我们可以嵌套class,list,map, 下面我们举个例子,先创建一个普通的POJO:
1 2 3 4 5 6
| @Data public class Credentials { private String authMethod; private String username; private String password; }
|
然后创建一个嵌套的配置文件:
1 2 3 4 5 6 7 8 9 10 11
| @Data @Configuration @ConfigurationProperties(prefix = "nestmail") public class NestConfigProperties { private String host; private int port; private String from; private List<String> defaultRecipients; private Map<String, String> additionalHeaders; private Credentials credentials; }
|
对应的属性文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # nest Simple properties nestmail.hostname=mailer@mail.com nestmail.port=9000 nestmail.from=mailer@mail.com
#List properties nestmail.defaultRecipients[0]=admin@mail.com nestmail.defaultRecipients[1]=owner@mail.com
#Map Properties nestmail.additionalHeaders.redelivery=true nestmail.additionalHeaders.secure=true
#Object properties nestmail.credentials.username=john nestmail.credentials.password=password nestmail.credentials.authMethod=SHA1
|