Spring 无法解析占位符

新手上路,请多包涵

我对春天还很陌生,所以如果这是一个愚蠢的问题,请原谅。当我尝试启动程序时出现以下错误: java.lang.IllegalArgumentException: Could not resolve placeholder 'appclient' in string value [${appclient}] 。执行以下代码时抛出错误:

 package ca.virology.lib2.common.config.spring.properties;
import ca.virology.lib2.config.spring.PropertiesConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;

@Configuration
@Import({PropertiesConfig.class})
@PropertySource("${appclient}")
public class AppClientProperties {
private static final Logger log = LoggerFactory.getLogger(AppClientProperties.class);
{
    //this initializer block will execute when an instance of this class is created by Spring
    log.info("Loading AppClientProperties");
}
@Value("${appclient.port:}")
private int appClientPort;

@Value("${appclient.host:}")
private String appClientHost;

public int getAppClientPort() {
    return appClientPort;
}

public String getAppClientHost() {
    return appClientHost;
}
}

名为 appclient.properties 的属性文件存在于资源文件夹中,其中包含主机和端口的信息。我不确定 "${appclient}" 在哪里定义,如果有的话。也许它甚至没有定义,这就是导致问题的原因。我是否需要将 "${appclient}" "{classpath:/appclient.properties}" 类的内容,或者我是否遗漏了其他内容?

原文由 Brkk 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

您没有正确读取属性文件。 propertySource 应将参数传递为: file:appclient.propertiesclasspath:appclient.properties 。将注释更改为:

 @PropertySource(value={"classpath:appclient.properties"})

但是我不知道你的 PropertiesConfig 文件包含什么,因为你也在导入它。理想情况下, @PropertySource 注释应该保留在那里。

原文由 Rohit Jain 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您使用的是 Spring 3.1 及更高版本,则可以使用类似…

 @Configuration
@PropertySource("classpath:foo.properties")
public class PropertiesWithJavaConfig {

@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
  return new PropertySourcesPlaceholderConfigurer();
}
}

您也可以通过 xml 配置,如…

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
  http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-3.2.xsd">

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

  </beans>

在早期版本中。

原文由 Aninda Bhattacharyya 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏