【发布时间】:2017-04-15 02:44:12
【问题描述】:
24.3 应用程序属性文件 SpringApplication 将从以下位置的 application.properties 文件中加载属性并添加 他们到 Spring 环境:
当前目录的 /config 子目录。
当前目录
类路径 /config 包
类路径根
它两次提到当前目录,但这并不意味着什么:
我尝试将它放在我的项目的根目录中(即在与java.io.File( "." ).getCanonicalPath() 和System.getProperty("user.dir"); 的输出匹配的文件夹中的src 上方),我尝试将它与war 文件一起放入(即在@987654325 中@)
但唯一真正有效的放置位置是默认位置 (src\main\resources)。
那么“当前目录”到底是什么意思?文件真正去哪里了?
我需要为文件找到正确的外部位置,这样我就不必在应用程序中构建数据库凭据。
指南说将application.properties 放在当前目录中会起作用,我找到了将其放入的确切当前目录,但它仍然不起作用,我可以通过以下输出验证:System.out.println(System.getProperty("spring.datasource.url")); 即@ 987654329@ 它仅使用嵌入的属性文件输出正确的值。
【问题讨论】:
-
故意含糊不清; “当前目录”是“任何目录映射到 '.' 的占位符。立即为您的应用程序”。它可能是启动 tomcat 的当前目录、可执行文件的目录,甚至是根目录,这取决于哪个应用程序是应用服务器,以及它是如何启动的。鉴于以上所有情况,您已经找到了属性文件的最佳位置。如果您不想内置凭据,请设置一个您可以按名称引用的 JNDI 数据源,然后在那里设置凭据。
-
你知道我发现 getproperty 的输出现在一直为空,即使它正在工作。我很确定我过去看到它不是空的。我真的不知道发生了什么,但我认为它正在获取属性文件,可能是在运行 getproperty 命令之后。
标签: java tomcat spring-boot properties-file externalizing