![Spring Boot @ConfigurationProperties](https://i-blog.csdnimg.cn/blog_migrate/7a0934de254cc89ded40fe66901efca4.png)
Spring Boot @ConfigurationProperties
使开发人员可以轻松地将整个.properties
和yml
文件映射到一个对象中。
PS已通过Spring Boot 2.1.2测试。
1. @Value
1.1通常,我们使用@Value
注入.properties
值,这对于小型而简单的.properties
文件来说是好的。 例如,
email=test@mkyong.com
thread-pool=12
@Component
@PropertySource("classpath:global.properties")
public class GlobalProperties {
@Value("${thread-pool}")
private int threadPool;
@Value("${email}")
private String email;
//getters and setters
}
1.2 @ConfigurationProperties
的等效项
import org.springframework.boot.context.properties.ConfigurationProperties;
@Component
@PropertySource("classpath:global.properties")
@ConfigurationProperties
public class GlobalProperties {
private int threadPool;
private String email;
//getters and setters
}
2. @ConfigurationProperties
2.1查看下面的复杂结构.properties
或yml
文件,我们将如何通过@Value
映射值?
#Logging
logging.level.org.springframework.web=ERROR
logging.level.com.mkyong=DEBUG
#Global
email=test@mkyong.com
thread-pool=10
#App
app.menus[0].title=Home
app.menus[0].name=Home
app.menus[0].path=/
app.menus[1].title=Login
app.menus[1].name=Login
app.menus[1].path=/login
app.compiler.timeout=5
app.compiler.output-folder=/temp/
app.error=/error/
或等效的YAML。
logging:
level:
org.springframework.web: ERROR
com.mkyong: DEBUG
email: test@mkyong.com
thread-pool: 10
app:
menus:
- title: Home
name: Home
path: /
- title: Login
name: Login
path: /login
compiler:
timeout: 5
output-folder: /temp/
error: /error/
注意
@ConfigurationProperties
支持.properties
和.yml
文件。
2.2 @ConfigurationProperties
可以解决:
package com.mkyong;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
@ConfigurationProperties("app") // prefix app, find app.* values
public class AppProperties {
private String error;
private List<Menu> menus = new ArrayList<>();
private Compiler compiler = new Compiler();
public static class Menu {
private String name;
private String path;
private String title;
//getters and setters
@Override
public String toString() {
return "Menu{" +
"name='" + name + '\'' +
", path='" + path + '\'' +
", title='" + title + '\'' +
'}';
}
}
public static class Compiler {
private String timeout;
private String outputFolder;
//getters and setters
@Override
public String toString() {
return "Compiler{" +
"timeout='" + timeout + '\'' +
", outputFolder='" + outputFolder + '\'' +
'}';
}
}
//getters and setters
}
package com.mkyong;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties // no prefix, find root level values.
public class GlobalProperties {
private int threadPool;
private String email;
//getters and setters
}
3. @ConfigurationProperties验证
此@ConfigurationProperties
支持JSR-303 Bean验证。
3.1添加@Validated
在@ConfigurationProperties
类,并javax.validation
上的字段说明我们想要验证。
package com.mkyong;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
@Component
@ConfigurationProperties
@Validated
public class GlobalProperties {
@Max(5)
@Min(0)
private int threadPool;
@NotEmpty
private String email;
//getters and setters
}
3.2设置线程池= 10
#Global
email=test@mkyong.com
thread-pool=10
3.3启动Spring Boot,我们将遇到以下错误消息:
***************************
APPLICATION FAILED TO START
***************************
Description:
Binding to target org.springframework.boot.context.properties.bind.BindException:
Failed to bind properties under '' to com.mkyong.GlobalProperties failed:
Property: .threadPool
Value: 10
Origin: class path resource [application.properties]:7:13
Reason: must be less than or equal to 5
Action:
Update your application's configuration
4.演示
$ git clone https://github.com/mkyong/spring-boot.git
$ cd externalize-config-properties-yaml
$ mvn spring-boot:run
access localhost:8080
![演示](https://i-blog.csdnimg.cn/blog_migrate/1514f387d0850e1578517c0784dae6dd.png)
注意
有关更多详细信息,请参阅此官方Spring Boot外部化配置
下载源代码
$ git clone https://github.com/mkyong/spring-boot.git
$ cd externalize-config-properties-yaml
$ mvn spring-boot:运行访问本地主机:8080
参考文献
翻译自: https://mkyong.com/spring-boot/spring-boot-configurationproperties-example/