如何在执行 jar 时从外部配置文件访问类路径

How to get access from external config file to classpath in executing jar

我开发 Spring Boot 2.2.1 应用程序。我有多个配置文件 (application-{provile}.yml) 并使用 liquibase 自动迁移数据库。一切正常(如果可以这么说 Java,哈哈)。但是在生产环境中我必须将配置文件作为外部yml文件从远处.

传递

我正在执行以下 shell 以启动应用程序:

java.exe -jar orgstructure-service-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod -Dspring.config.location=./application-prod.yml

应用程序正在启动并且配置正确应用,但 liquibase 除外。 Liquibase 使用类路径进行变更日志配置:

  liquibase:
    change-log: classpath:db/changelog/changelog.xml

但是无法从外部(在 jar 之外)访问更改日志 application.yml 因此 liquibase 无法应用迁移。如何解决这个问题,让liquibase在这样的环境下工作?

我找到了这个问题的解决方案,我在两个文件上分离了 applicatiom-prod.yml,其中 applicatiom-prod.yml 存储在 ./src/main/resources 目录中,并且已打包在 jar 中,第二个我调用了 application-customization.yml 并且它与 jar 文件分开但位于同一目录中。 application-prod.yml包括秒数如下:

  spring:
    profiles: 
      active: prod
      include:
        customization
    liquibase:
      change-log: classpath:db/changelog/changelog.xml

  logging:
    level:
      root: INFO
      org.springframework: INFO
      org.hibernate.SQL: INFO
      org.hibernate.type: INFO
      liquibase: INFO

自定义包含数据库和授权服务器连接等设置。