我有以下配置文件:
@Configuration
public class PropertyPlaceholderConfigurerConfig {
@Value("${property:defaultValue}")
private String property;
@Bean
public static PropertyPlaceholderConfigurer ppc() throws IOException {
PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
ppc.setLocations(new ClassPathResource("properties/" + property + ".properties"));
ppc.setIgnoreUnresolvablePlaceholders(true);
return ppc;
}
}
我使用以下VM选项运行应用程序:
-Dproperty=propertyValue
因此,我希望我的应用程序在启动时加载特定的属性文件。但是由于某些原因,@Value
目前未处理注释,属性为null
。另一方面,如果我已经PropertyPlaceholderConfigurer
通过xml文件进行了配置,那么一切都会按预期进行。Xml文件示例:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreResourceNotFound" value="true"/>
<property name="location">
<value>classpath:properties/${property:defaultValue}.properties</value>
</property>
</bean>
如果我尝试将属性值注入到另一个Spring配置文件中-
它已正确注入。如果将我的PropertyPlaceholderConfigurer
bean创建移动到该配置文件-字段值再次为null。
解决方法是,使用以下代码行:
System.getProperties().getProperty("property", "defaultValue")
哪一个也可以,但是我想知道为什么会发生这种行为,也许可以用其他方式重写它而不使用xml?
从Spring JavaDoc:
为了使用PropertySource的属性解析$
{…}占位符在定义或@Value注释中,必须注册一个PropertySourcesPlaceholderConfigurer。在XML中使用时会自动发生,但是在使用@Configuration类时必须使用静态@Bean方法显式注册。有关详细信息和示例,请参见@Configuration的javadoc的“使用外部化的值”部分和@Bean的javadoc的“关于BeanFactoryPostProcessor-
返回@Bean方法的说明”。
因此,您正在尝试在启用占位符处理所需的代码块中使用占位符。
如@ M.Deinum所述,您应该使用PropertySource(默认或自定义实现)。
下面的示例显示如何在PropertySource批注中使用属性,以及如何从字段中的PropertySource注入属性。
@Configuration
@PropertySource(
value={"classpath:properties/${property:defaultValue}.properties"},
ignoreResourceNotFound = true)
public class ConfigExample {
@Value("${propertyNameFromFile:defaultValue}")
String propertyToBeInjected;
/**
* Property placeholder configurer needed to process @Value annotations
*/
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
这是我用来读取gradle项目中的application.properties文件的代码。 我的文件位于中 这就是我试图在IntelliJ中运行应用程序的方式
我曾在其他项目中工作过,我只是重新做同样的事情,但由于某些原因,它不起作用。Spring不是从属性文件读取,而是从字面上取值 AppConfig.java ApplicationContext.xml: AppConfig.Properties 想法?
问题内容: 我有以下配置类: and I have service with property: 我想使用以下命令测试AppConfig配置类时收到错误消息 该问题记录在SPR-8539中 但无论如何,我无法弄清楚如何配置PropertySourcesPlaceholderConfigurer 使其正常工作。 编辑1 这种方法适用于xml配置 但我想使用Java进行配置。 问题答案: 如果使用@P
我想对Spring Boot进行JUnit测试,如下所示: 应用程序est.java这样 我的POM是这样的: 当我运行测试时,我得到了以下错误信息 但是当我以普通Java应用程序的形式运行这个应用程序时 它工作得很好! 它怎么了?我应该如何使用Spring Boot进行jUnit测试?非常感谢!
本文向大家介绍Spring @value和@PropertySource注解使用方法解析,包括了Spring @value和@PropertySource注解使用方法解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Spring @value和@PropertySource注解使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考
我试图实现一个第三方的SDK捆绑包时,我运行我得到了以下错误: 任务“:app:checkDebugarMetadata”的执行失败。 无法解析配置“:app:debugRuntimeClasspath”的所有文件。 无法解析com。ts.auth-control-sdk:5.1.1。要求:项目:应用 sun.security.provider.certpath.SunCertPathBuilde