为了账号安全,请及时绑定邮箱和手机立即绑定

@ConfigurationProperties vs @PropertySource vs

@ConfigurationProperties vs @PropertySource vs

鸿蒙传说 2024-01-28 17:24:22
我是 Spring/Spring Boot 的新手。application.properties我想在Java文件中使用/的键值对数据application.yml。我知道我们可以在任何 POJO 类中使用来设置文件或文件@Value中字段的默认值。application.propertiesapplication.ymlQ1)但是为什么我们需要另外两个呢?@ConfigurationProperties和@PropertySource。Q2)@ConfigurationProperties和@PropertySource,都可以用来加载application.properties或application.yml文件中提到的外部数据?或者有什么限制吗?PS:我尝试在网上搜索但没有得到明确的答案。
查看完整描述

3 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

@ConfigurationProperties用于 POJO bean 将属性映射到其字段或设置器。然后,您可以使用该 bean 来访问应用程序逻辑中的属性值。

@PropertySource是引用一个属性文件并将其加载到Spring环境中(其中可以被@ConfigurationProperties或@Value使用)。

@Value是将特定属性值通过其键注入到变量(成员字段或构造函数参数)中。


查看完整回答
反对 回复 2024-01-28
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

@Value("${spring.application.name}") 如果 application.properties/yml 文件中没有匹配的键,@Value 将抛出异常。它严格注入财产价值。


例如:@Value("${spring.application.namee}")抛出以下异常,因为namee属性文件中不存在字段。


application.properties file

----------------------

spring:

  application:

    name: myapplicationname



org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'testValue': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.application.namee' in value "${spring.application.namee}"


Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.application.namea' in value "${spring.application.namee}"

@ConfigurationProperties(prefix = "myserver.allvalues")注入 POJO 属性,不严格,如果属性文件中没有 key 则忽略该属性。


例如:


@ConfigurationProperties(prefix = "myserver.allvalues")

public class TestConfigurationProperties {

    private String value;

    private String valuenotexists; // This field doesn't exists in properties file

                                   // it doesn't throw error. It gets default value as null

}


application.properties file

----------------------

myserver:

  allvalues:

    value:  sampleValue


查看完整回答
反对 回复 2024-01-28
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

基于我的研究和理解::

  • @ConfigurationProperties

    从加载属性application.properties

    您指定字段名称以对应于中的属性名称application.properties

    --@ConfigurationProperties不适用于@Value

  • @PropertySource

    从您指定的文件加载属性

    可以与@Value或 一起使用@Autowired Environment env;

  • @Value

    它与application.properties

    application.properties默认加载(不需要在 中指定@PropertySource


查看完整回答
反对 回复 2024-01-28
  • 3 回答
  • 0 关注
  • 43 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信