Java 属性文件中资源中的Spring引导参考文件位置

Java 属性文件中资源中的Spring引导参考文件位置,java,spring-boot,Java,Spring Boot,我有一个使用GooglePubSubAPI的SpringBoot应用程序。我需要使用文件credentials.json注入Google凭据和其他属性。我将文件放在我的src/main/resources中(否则,它将不会将文件放在构建的jar中),如下所示: spring.cloud.gcp.credentials.location=file:src/main/resources/credentials.json 但是,当我构建jar时,这个文件被放在根目录中,并且这个路径不再有效。因此,我

我有一个使用GooglePubSubAPI的SpringBoot应用程序。我需要使用文件
credentials.json
注入Google凭据和其他属性。我将文件放在我的
src/main/resources
中(否则,它将不会将文件放在构建的jar中),如下所示:

spring.cloud.gcp.credentials.location=file:src/main/resources/credentials.json
但是,当我构建jar时,这个文件被放在根目录中,并且这个路径不再有效。因此,我能够从Eclipse运行我的应用程序,因为到那时,该文件仍在我的资源目录中,但在构建之后,我无法将其作为独立的jar运行,因为路径突然变成了
file:credentials.json


是否有一些简单的方法可以将路径指定为相对路径,以便它在IDE中和运行我的jar时都能工作?我可以通过env注入路径。变量,但我只会在绝对必要的情况下这样做。

如果您使用
类路径
前缀,那么Spring将在您的classapth上查找该文件

如果您将文件放入
src/main/resources
中,那么默认情况下,Maven会将其复制到类路径的根目录中,然后它将可寻址,如下所示:

spring.cloud.gcp.credentials.location=classpath:credentials.json
无论

  • 您正在IDE中运行;IDE的Maven集成将把文件从
    src/main/resources
    复制到类路径的根目录中,通常是
    target/classes
  • 您正在运行一个构建的JAR;Maven将文件从
    src/main/resources
    复制到JAR的根目录

我正要写这篇文章,除此之外,您还可以通过系统属性ex.-Dmy.credentials.path=/my/nice/path/credentials.json定义路径并在那里访问它,或者,最后但并非最不重要的是,您可以使用配置文件。谢谢。正是我需要的!