@ConfigurationProperties
注释用于从属性文件中提取**“一组配置值”**。 @ConfigurationProperties
注释还用于在开发基于微服务架构的应用程序时进行外部化配置。
它与我们在之前的一篇 Spring Boot 博客中讨论过的 @Value 注释最相似。
@ConfigurationProperties
注释和 @Value
注释的主要区别是:
@ConfigurationProperties
注释用于从属性文件中注入一组类似的 (prefix) 值,而 @Value
注释用于注入单个/特定值。@ConfigurationProperties
是用 POJO bean 映射属性,@Value
是通过它的键注入一个特定的属性值。使用 @ConfigurationProperties
注释不需要特殊的依赖项。 spring-boot-starter-parent 就足够了。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
这是 application.properties 文件,我们在其中使用前缀 user 对用户详细信息进行了分组。
application.properties
app.name=Config Annotation
app.desc= This is Spring Boot Project
# Grouped propeties
user.id=atul
user.name=Atul Rai
user.password=Hello@123
user.role=ADMIN
现在让我们创建相应的 POJO 类,这些属性值将注入其中。 @ConfigurationProperties
注释有一个属性,即 prefix,我们可以在其中映射我们的属性键。
UserConfiguration.java
package org.websparrow.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "user")
public class UserConfiguration {
// Generate Getters and Setters...
private String id;
private String name;
private String password;
private String role;
@Override
public String toString() {
return "UserConfiguration [id=" + id + ", name=" + name + ", password="
+ password + ", role=" + role + "]";
}
}
注意: 如果我们在 POJO 中不使用 @Configuration
,那么我们需要在主 Spring 应用程序类中添加 @EnableConfigurationProperties(*UserConfiguration*.class)
来将属性绑定到 POJO 中。
与 application.properties 文件类似,我们也可以从 application.yaml 文件中注入属性值。
application.yaml
app:
name: Config Annotation
desc: This is Spring Boot Project
# Grouped propeties
user:
id: manish
name: Manish
password: abc@123
role: USER
我们可以从任何属性文件(database.properties)注入值。在这种情况下,我们将使用 @PropertySource
批注加载属性文件。
为此,这里是保存所有数据库凭据的属性文件。
database.properties
db.port=34
db.host=127.0.0.1
db.user=root
db.password=admin@123
相应的 POJO 如下所示:
DBConfiguration.java
package org.websparrow.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@PropertySource("classpath:database.properties")
@ConfigurationProperties(prefix = "db")
public class DBConfiguration {
// Generate Getters and Setters
private int port;
private String host;
private String user;
private String password;
@Override
public String toString() {
return "DBConfiguration [port=" + port + ", host=" + host + ", user="
+ user + ", password=" + password + "]";
}
}
对于应用程序是否从属性文件中提取值,我们创建了 MyController
类并使用 @Autowired 注释自动装配了两个配置类。
MyController.java
package org.websparrow.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.websparrow.config.DBConfiguration;
import org.websparrow.config.UserConfiguration;
@RestController
public class MyController {
@Autowired
private UserConfiguration userConfiguration;
@Autowired
private DBConfiguration dbConfiguration;
@GetMapping("/config")
public String userConfiguration() {
return userConfiguration.toString();
}
@GetMapping("/database")
public String databaseConfiguration() {
return dbConfiguration.toString();
}
}
到这里,我们完成了 🙂 只需启动您的应用程序并在您最喜欢的浏览器中点击以下端点:
它将从 application.properties 文件中注入按 user 分组的值。
UserConfiguration [id=atul, name=Atul, password=Hello@123, role=ADMIN]
它将注入 database.properties 文件中按 db 分组的值。
DBConfiguration [port=34, host=127.0.0.1, user=root, password=admin@123]
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.websparrow.org/spring/configurationproperties-annotation-in-spring-boot
内容来源于网络,如有侵权,请联系作者删除!