当我们开发 Spring Boot 应用时,会遇到读取配置文件的场景,Spring Boot 框架提供了三种读取配置文件的方式,分别是:
- @Value:通过注解方式读取配置项的值。
- Environment:通过 Environment 类对象读取配置项的值。
- @ConfigurationProperties:通过自动映射读取属性文件或 yml 文件中所有以指定前缀开始的配置项。
下面将详细讲解这三种读取配置文件值的方式。
通过 @Value 读取配置项的值
@Value 注解可以用来读取配置文件中的属性值,其使用方式如下:
@Value("${config.property}")
private String configProperty;
在示例代码中,${config.property}
表示需要读取的属性名。其中 ${}
表示 Spring 的 SpEL 表达式,会自动从配置文件中查找相应的属性并进行注入。
例如,假设我们在 application.properties
文件中设置了 config.property=test config property
,那么当 Spring Boot 启动后,@Value("${config.property}")
属性注入器会自动读取这个属性值并赋值给 configProperty
变量。
以下是一个使用 @Value 读取默认配置文件的示例代码:
@RestController
@RefreshScope
public class TestController {
@Value("${config.url}")
private String url;
@Value("${config.username}")
private String username;
@Value("${config.password}")
private String password;
@GetMapping("/config")
public String getConfig() {
return "url: " + url + ", username: " + username + ", password: " + password;
}
}
在代码中,我们使用了 @Value
注解读取 config.property
、config.username
和 config.password
三个属性值,并在 /config
路径上提供了一个 GET 接口,访问该接口时会返回这三个属性值。需要注意的是,这里需要添加 @RefreshScope
注解,这是为了让配置文件的改变可以被实时刷新。
通过 Environment 读取配置项的值
Environment 类提供了一个getProperty
方法,可以用来读取指定名称的配置属性。其使用方式如下:
@Autowired
private Environment env;
public String getConfig() {
String url = env.getProperty("config.url");
String username = env.getProperty("config.username");
String password = env.getProperty("config.password");
return "url: " + url + ", username: " + username + ", password: " + password;
}
在示例代码中,我们先通过 @Autowired 注解自动引入 Environment 对象,然后使用 getProperty
方法来读取 config.url
、config.username
和 config.password
这三个配置属性的值。需要注意的是,如果没有配置该属性或该属性值为空,则会返回 null。
以下是一个通过 Environment 读取默认配置文件的示例代码:
@RestController
@RefreshScope
public class TestController {
@Autowired
private Environment environment;
@GetMapping("/config")
public String getConfig() {
String url = environment.getProperty("config.url");
String username = environment.getProperty("config.username");
String password = environment.getProperty("config.password");
return "url: " + url + ", username: " + username + ", password: " + password;
}
}
在代码中,我们使用了 environment.getProperty
方法读取 config.property
、config.username
和 config.password
这三个属性的值,并在 /config
路径上提供了一个 GET 接口,访问该接口时会返回这三个属性值。同样需要添加 @RefreshScope
注解,以便让配置文件的改变可以被实时刷新。
通过 @ConfigurationProperties 读取配置项的值
@ConfigurationProperties
注解可以用于绑定 yml 或 properties 文件中的配置属性,使这些属性可以注入到指定的 Java 对象中。它的使用方式如下:
@Configuration
@ConfigurationProperties(prefix = "config")
public class ConfigProperties {
private String url;
private String username;
private String password;
// Getter and Setter
}
在示例代码中,@ConfigurationProperties(prefix = "config")
表示需要绑定的配置前缀,即需要读取哪些属性。在这个例子中,我们希望读取 config.url
、config.username
和 config.password
这三个属性的值,所以将前缀设置为 config
。
需要注意的是,类中的属性名称需要和配置文件中的属性名称完全一致。如果配置文件中的属性名为 config.url
,那么类中的属性名称也必须是 url
。
以下是一个使用 @ConfigurationProperties
读取配置文件的示例代码:
@RestController
@RefreshScope
public class TestController {
@Autowired
private ConfigProperties config;
@GetMapping("/config")
public String getConfig() {
return "url: " + config.getUrl() + ", username: " + config.getUsername() + ", password: " + config.getPassword();
}
}
在代码中,我们使用了 @Autowired
注解来自动注入 ConfigProperties
对象,并通过这个对象来读取 config.url
、config.username
和 config.password
这三个属性的值。同样需要添加 @RefreshScope
注解,以便让配置文件的改变可以被实时刷新。
以上就是 Spring Boot 读取配置文件内容的 3 种方式:@Value、Environment 和 @ConfigurationProperties 的详细讲解。实际开发中,开发者可以根据自己的具体情况选择最合适的方式来读取配置属性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot读取配置文件内容的3种方式(@Value、Environment和@ConfigurationProperties) - Python技术站