无法在spring-context.xml中加载属性文件。属性文件路径在dev.properties中作为占位符提供

无法在spring-context.xml中加载属性文件。属性文件路径在dev.properties中作为占位符提供,spring,properties,property-placeholder,Spring,Properties,Property Placeholder,我正在spring-context.xml中加载属性文件,并给出 中的外部属性文件位置 ${spring.profiles.active}.properties位于类路径中,并将该位置用作spring context.xml中的Placeholder。我的spring context.xml是: 我的问题是,${app.config.batch.location}占位符不可用 在spring-context.xml中解析并尝试加载文件 ${app.config.batch.location}代替

我正在spring-context.xml中加载属性文件,并给出 中的外部属性文件位置 ${spring.profiles.active}.properties位于类路径中,并将该位置用作spring context.xml中的Placeholder。我的spring context.xml是:

我的问题是,${app.config.batch.location}占位符不可用 在spring-context.xml中解析并尝试加载文件 ${app.config.batch.location}代替 E:/project/properties/config.properties

我希望我能很好地解释这个问题。请帮忙


提前感谢

您需要创建PropertyPlaceHolderConfigure类的bean。
不仅仅是一些ArrayList bean。为什么您认为需要这个ArrayList bean?

您需要创建PropertyPlaceHolderConfigure类的bean。
不仅仅是一些ArrayList bean。为什么您认为您需要这个ArrayList bean?

您似乎在使用spring概要文件,而不是混淆初始化时间属性值绑定,您可以做的是。。。 1) 读取属性文件(配置文件的) /WEB-INF/properties/${spring.profiles.active}.properties 2) 创建一个可以读取这些属性值的java类。(不要忘记使用spring profiles接口类) 3) 当您试图读取其位置嵌入在属性文件(步骤1)中的属性文件时,在步骤2创建的对象将为key
${app.config.batch.location}
现在可以使用可用的文件读取器类加载此属性文件。 4) 创建
属性
对象并访问其中的值


注意:如果您的任何bean初始化依赖于步骤4中读取的键值,请手动进行初始化或创建***自定义类(servlet),该类在任何其他类(甚至是spring的DispacterServlet)之前加载。

您似乎在使用spring概要文件,您可以做的不是处理初始化时间属性值绑定,而是。。。 1) 读取属性文件(配置文件的) /WEB-INF/properties/${spring.profiles.active}.properties 2) 创建一个可以读取这些属性值的java类。(不要忘记使用spring profiles接口类) 3) 当您试图读取其位置嵌入在属性文件(步骤1)中的属性文件时,在步骤2创建的对象将为key
${app.config.batch.location}
现在可以使用可用的文件读取器类加载此属性文件。 4) 创建
属性
对象并访问其中的值


注意:如果您的任何bean初始化依赖于在步骤4中读取的键值,则手动进行初始化或创建***自定义类(servlet),该类在任何其他类(甚至是spring的DispacterServlet)之前加载.

Hi@ЮЮЮЮПааааааааааааааааааааааа107。可能的方法是在构建系统处理资源时使用一些占位符,这些占位符由构建系统解析。我知道这一点,但我找不到实现它的方法。如果你能提出一些建议,那将很有帮助。谢谢。对于gradle,这将是这样的:
processResources{filesmatting('*.properties'){filter(ReplaceTokens,tokens:[MYTOKEN:'mytokenvalue'])}
在属性文件中,您想添加
@MYTOKEN@
占位符hi@ЮЮЮааааПааааааааааааааа107,因为您在ArrayList bean配置中使用占位符,而您没有占位符。可能的方法是在构建系统处理资源时使用一些占位符,这些占位符由构建系统解析。我知道这一点,但我找不到实现它的方法。如果你能提出一些建议,那将很有帮助。谢谢。对于gradle,这将是这样的:
processResources{filesmatting('*.properties'){filter(replacetokes,tokens:[mytokens:'mytokenvalue'])}
并且在属性文件中要添加
@MYTOKEN@
占位符
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="ignoreResourceNotFound" value="true" />
    <property name="ignoreUnresolvablePlaceholders" value="true" />
    <property name="searchSystemEnvironment" value="true" />
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    <property name="locations" ref="propertyConfigurerFiles" />
    </bean>
    <bean id="propertyConfigurerFiles" class="java.util.ArrayList">
    <constructor-arg>
    <list>
    <value>/WEB-INF/properties/common.properties</value>

    <!--In Developemnet Enviroenment it will be dev.properties-->
    <value>/WEB-INF/properties/${spring.profiles.active}.properties</value> 

    <!--External Property File Location as a Placeholder-->
    <value>${app.config.batch.location}</value>

    </list>
    </constructor-arg>
    </bean>
    app.config.batch.location=E:/project/properties/config.properties