当前位置: 首页 > 知识库问答 >
问题:

spring-boot属性占位符

羿宏硕
2023-03-14

我不明白为什么不能在Spring-Boot中向application.properties文件中注入值。外部属性添加到logging.file变量中。我有一个application.properties文件,看起来如下所示

logging.file=${mylogfile}
server.port=${myport}

具有相应的Spring-boot应用程序类

@PropertySources({
@PropertySource("file:///c:/myfolder/externalprops.properties"),
})

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {

public static void main(String[] args) throws Exception {
    SpringApplication.run(Application.class, args);
}
}
mylogfile=myoutput.log
myport=8060
Exception in thread "main" java.lang.IllegalArgumentException: Could not resolve placeholder 'mylogfile' in string value "${mylogfile}"
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)

请注意,如果我自己注入服务器端口号,那么在注入和启动应用程序时没有任何问题。

我在这个问题上兜圈子,弄不清自己做错了什么。

共有1个答案

窦涵忍
2023-03-14

我认为您不能使用@propertysource向“application.properties”中注入值--在读取或甚至了解任何@configuration之前,必须对“application.properties”进行分析并准备好使用。您的外部属性可以放在“${user.dir}/application.properties”中,我认为这将达到您正在尝试的目的。

 类似资料:
  • 问题内容: 有谁知道我是否应该可以在预选赛中使用属性占位符作为表达式?我似乎无法正常工作。 我正在使用Spring 3.0.4。 XML: config.properties: 问题答案: 这可行。如果仅使用默认的spring bean名称,则可以省略服务名称。serviceA与ServiceA等 XML: Props:

  • 问题内容: 我有我的配置: 我得到错误 我知道这可能缺少属性文件,但是我在类路径中恰好有它。有什么不见了? 我的web.xml: 问题答案: 你的应用程序中可能有多个。尝试在超类的方法上设置一个断点,看看在应用程序启动时是否多次调用了该断点。如果不止一个,则可能需要查看配置属性,以便你的应用程序可以正常启动。

  • 在Spring Boot中更改属性占位符的前缀和后缀的最简单方法是什么? 默认值是,但是这在Kotlin中看起来很难看,因为它需要转义-${something}是Kotlin中用于字符串模板的语言功能。

  • 问题内容: 我有一个使用Logback的Spring Boot控制台应用程序。所有属性(针对应用程序和Logback)都被外部化为类路径中的标准application.properties文件。在应用程序本身中可以很好地拾取这些属性,但在logback.xml文件中不会拾取这些属性。在Spring Boot启动之前,似乎好像处理了logback.xml,因此未处理EL占位符。 以FileNameP

  • 我有一个使用Logback的Spring Boot控制台应用程序。所有属性(应用程序和日志)都外部化到类路径中的标准application.properties文件中。这些属性在应用程序本身中可以很好地提取,但在logback.xml文件中不能提取。看起来好像是在Spring Boot启动之前处理了logback.xml,因此没有处理EL占位符。 使用FileNamePattern作为示例,在ap

  • 我有个例外 我也尝试过使用JarLoader和PropertiesLauncher,但运气并不好。 我确实在application.properties中定义了属性sysm.client.api.path,但为了更好地衡量,我还将它作为-d参数-dsysm.client.api.path=my-path添加到命令行中。 注意:IntelliJ没有将其作为a-jar运行;相反,它在一个大型类路径命令