gpt4 book ai didi

java - 在 Spring 中定义 '*.properties' 文件位置

转载 作者:行者123 更新时间:2023-11-30 08:09:52 26 4
gpt4 key购买 nike

我有几个 bean 的 Spring 上下文,例如:

<bean id="anyBean" class="com.my.app.AnyBean"
p:test_user="${any1}"
p:test_pass="${any2}">
</bean>

为了解析这些占位符(${any1} 和 ${any2}),我使用:

<bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" p:location="my.properties" />

它工作正常,但我需要从主类的“main”方法定义“my.properties”的位置。像这样:

ApplicationContext context = new ClassPathXmlApplicationContext(my_xml_config.xml);
PropertyPlaceholderConfigurer ppc = context.getBean("propertyPlaceholderConfigurer", PropertyPlaceholderConfigurer.class);

Resource resource = context.getResource("path/to/my.properties");
ppc.setLocation(resource);

但是当我尝试启动它时:

Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'AnyBean' defined in class path resource [my_xml_config.xml]: Could not resolve placeholder 'any1' in string value "${any1}"

请问有什么办法可以解决这个问题吗?

最佳答案

当你试图得到一个 bean 的时候

PropertyPlaceholderConfigurer ppc = context.getBean("propertyPlaceholderConfigurer", PropertyPlaceholderConfigurer.class);

Spring 已经尝试刷新您的上下文,但失败了,因为该属性不存在。您需要通过 specifying it in the constructor 阻止 Spring 这样做

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"my_xml_config.xml"}, false);

由于 ApplicationContext 未刷新,因此 PropertyPlaceholderConfigurer bean 不存在。

为此,您需要使用 PropertySourcesPlaceholderConfigurer而不是 PropertyPlaceholderConfigurer(感谢 M.Deinum)。您可以按照与 PropertyPlaceholderConfigurer bean 相同的方式在 XML 中声明它,或者使用

<context:property-placeholder />

您需要利用 PropertySourcesPlaceholderConfigurer 有其自己的位置这一事实,而且还使用在 ApplicationContext 中注册的 PropertySource 实例s 环境

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"your_config.xml"}, false);
// all sorts of constructors, many options for finding the resource
ResourcePropertySource properties = new ResourcePropertySource("path/to/my.properties");
context.getEnvironment().getPropertySources().addLast(properties);
context.refresh();

关于java - 在 Spring 中定义 '*.properties' 文件位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32061025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com