我需要知道以下两种加载属性文件的方式之间的区别。

方法1

 <context:property-placeholder location="classpath:constants.properties"/>

方法2

<context:component-scan base-package="com.snippets.enterprise"/>

package com.snippets.enterprise;

@Configuration
@PropertySource("classpath:/constants.properties")
public class SpringConfig  {}

我在方法中看到在加载应用程序上下文时有两个键和值可用。 但在

当应用程序上下文正在加载时, 方法的属性的关键之一不可用,它说

找不到密钥。 请让我知道这两种方法的区别。

  1. 使用应用程序上下文加载属性文件时。

  2. 键入key时,属性文件的值将在容器中初始化。

===============>>#1 票数:5

两者实际上都是非常独立的。 让我尝试根据我的理解进行澄清:

使用context:property-placeholder方法1注册了一个组件,该组件可以在bean定义中解析${propertyname}形式的占位符。

@PropertySource批注为活动的Spring环境提供属性。

现在,回到方法1, context:property-placeholder实际上足够聪明,知道它不仅需要查看通过其location属性注册的属性,还需要查看当前活动环境中可用的属性(属性已通过@PropertySource注释(如您的方法2)添加到其中。

因此,如果您希望继续解决占位符,则需要将方法1与方法2结合使用。

另一方面,如果您想专门使用方法2,那么最好的方法是在需要该属性并明确查找该属性的环境中进行注入,方法是:

@Component
public class MyBean {
    @Autowired 
    private Environment environment;

    public void mymethod() {
        ..
        environment.getProperty("mykey");
    }
}

  ask by Kasun translate from so

未解决问题?本站智能推荐:

1回复

上下文配置和@PropertySource

我有一个如下所示的完美测试设置... 这样可以很好地运行,并且没有任何问题,但是当我在正在运行的应用程序中运行测试代码的完全相同的部分时,所有事情都会变得一团糟。 让我详细说明... 我的Java配置文件描述了这样的属性文件 我在Heroku上运行我的应用程序,因此将我的
1回复

使用@PropertySource的Spring属性配置

在下面的Spring配置类中,我通过@PropertySource加载app.properties文件,并使用来自属性文件的配置构造2个不同的DBCP数据源。 尽管一切正常,但我不喜欢为每个配置属性都声明一个带有注释的变量以构造数据源。 我试图像这样自动连接环境类 但是,当env
3回复

从零开始-上下文错误:属性占位符

我正在使用Spring在非常非常简单的应用程序上进行测试。 我的应用程序只有一个bean ,我正在向该类注入一个简单的String并输出该值。 到目前为止,一切正常 。 我需要的: 我想从配置文件中获取此字符串,所以我在/ src / main / resource中创建文
2回复

Spring上下文:找不到属性占位符文件

我正在尝试构建一个独立的基于Spring的Java应用程序。 我正在使用Maven程序集插件来构建具有依赖关系的JAR。 JAR的结构最终看起来像这样(只是一个子集): 清单看起来像这样: 当应用程序运行时,应通过包含properties.xml文件来配置属性占位符:
1回复

Spring上下文:布尔值的属性占位符

我正在开发一个应用程序,其中有两个都实现一个公共接口的类。 因此,在进行bean声明时,我将在我的app-context.xml文件中将其中一个标记为主要。 我可以这样简单地声明主bean来实现: 现在,我不想硬编码哪个bean将成为主bean,而是想从属性文件中读取true / f
1回复

使用2个上下文占位符时无法加载属性

我写了一个测试类来读取定义的属性 TestOne.xml TestTwo.xml testone.properties testtwo.properties 在运行测试时,输出为 睾丸激素 它不是从属性中获取test.two。 如果我未指
7回复

Mule ESB:上下文属性占位符

我有一个关于Mule的上下文属性占位符的问题,我有两个文件设置如下: 首先这是一个有效的配置,其次哪个文件优先于另一个? app1或app2文件? -S
2回复

@PropertySource属性路径未解析

我已经设置了环境变量JAVA_OPTS(-Dappconfig = D:/ cc / dd -Dfarm = test,并且想要使用以下代码从属性中读取属性,但是无论我尝试了什么,我都遇到了以下错误。我需要这样做适用于不同的环境(测试,登台,开发,生产)。任何帮助表示赞赏
4回复

是否可以在运行时指定上下文属性占位符

我有一个使用弹簧的独立罐子。 我的spring xml中的配置使用了占位符,在使用maven进行编译时已将其替换。 弹簧配置示例: 与其使用maven代替${db.host}我想在运行时传递属性文件,例如 这将允许我通过传入生产数据库属性文件或测试数据库属性文件来在运行时切换
2回复

如何在不同的上下文中使用多个属性占位符

我使用Spring Framework和Spring Security。 我需要在不同的地方使用页面路径。 例如,“ / mainpath”。 我将其放在/WEB-INF/classes/path.properties中。 该路径应在servlet-context.xml和securit