1

从手册:

24.3 应用程序属性文件 SpringApplication 将从以下位置的 application.properties 文件中加载属性并将它们添加到 Spring 环境中:

当前目录的 /config 子目录。

当前目录

一个类路径 /config 包

类路径根

它两次提到当前目录,但这并不意味着什么:

我尝试将它放在我的项目的根目录中(即在与andsrc的输出匹配的文件夹中),然后我尝试将它与 war 文件放在一起(即在 中)java.io.File( "." ).getCanonicalPath()System.getProperty("user.dir");build\libs

但唯一真正有效的放置位置是默认位置 ( src\main\resources)。

那么“当前目录”到底是什么意思,文件到底去哪里了呢?

我需要为文件找到正确的外部位置,这样我就不必在应用程序中构建数据库凭据。

指南说放入当前目录将起作用,我找到了要放入的确切当前目录,但它application.properties仍然不起作用,我可以通过以下输出来验证:属性文件。System.out.println(System.getProperty("spring.datasource.url"));null

4

5 回答 5

4

根据ConfigFileApplicationListener

// Note the order is from least to most specific (last one wins)
private static final String DEFAULT_SEARCH_LOCATIONS =
       "classpath:/,classpath:/config/,file:./,file:./config/";

file:./解析到启动 java 进程的工作目录。

于 2016-11-30T17:23:18.637 回答
3

我同意 Stephane Nicoll 的论点,即我们通常不需要在开发和测试中使用它,但在属性文件通常被外部化并且不使用源代码中存在的文件的生产环境中需要它。这对我有用,

java -jar myjar.jar --spring.config.location=file:D:\\RunRC\\application.properties

上面命令中提到的目录——D:\\RunRC是我机器上的示例。

我继续使用源代码的属性文件,即\src\main\resources\在开发和测试中但在生产中,我注释掉条目,如果我D:\\RunRC从那时开始我的 jar 或战争,我提供当前目录,如上面的 java 命令所示,并将属性文件保留在那里。

只是做 -@PropertySource({ "application.properties"})或者@PropertySource({ "file:application.properties"})不从保存 jar 或 war 的目录中获取它。

对于数据库凭据,我建议使用特定于操作系统的环境变量并使用类似于 -指向该目录的现有环境变量的@PropertySource({"file:${CONF_DIR}database.properties" })语法。CONF_DIR

希望能帮助到你 !!

于 2016-12-22T10:41:22.073 回答
0

当前目录是指我们执行 jar 的位置。通过 Spring Boot maven 插件创建可执行 jar 并将 application.properties 放在 jar 文件旁边将起作用。一个例子:这里

于 2017-07-13T05:20:44.170 回答
0

我了解当前目录是您项目的根目录。但是,您可以使用-Dspring.config.location=your/config/dir/. 看看这篇文章在此处输入链接描述

于 2016-11-30T17:15:05.960 回答
0

如果您搜索“当前目录 java”,您最终会遇到这个问题。目的是如果您将一个application.properties与应用程序放在同一目录中,它将默认被拾取。

您不会在开发或测试中使用该功能,因为您不应该依赖该功能。但是,在生产环境中运行您的应用程序时,将特定于环境的设置放在应用程序本身旁边的配置文件中可能会很方便。

于 2016-11-30T17:19:39.390 回答