【问题标题】:How to load property/config files from external directory in springboot如何在 Spring Boot 中从外部目录加载属性/配置文件
【发布时间】:2017-07-25 21:34:48
【问题描述】:

我有一些配置文件,与其他系统共享。所以,我想在每次应用启动前通过Git同步这些文件。应用程序被归档到 Spring-boot JAR 文件中。

首先,我做了一个实验。我试图从外部目录加载 logback 配置文件:logback.xml。根据 springboot 文档 http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/loader/PropertiesLauncher.html 。我将 load.path 参数添加到启动命令中。

java -Dloader.home="./" -Dloader.path="sds_ser/" -Djava.security.egd=file:/dev/./urandom -jar service-0.0.1-SNAPSHOT.jar --spring.profiles.active=test

sds_ser 是 logback.xml 的目录。其中还有service-0.0.1-SNAPSHOT.jar。但是启动失败,找不到logback.xml!

有人可以帮忙吗?谢谢!

【问题讨论】:

  • 你试过/sds_ser/logback.xml吗?
  • 是的,我试过了,但又失败了!
  • 在此处查看外部化配置docs.spring.io/spring-boot/docs/current/reference/html/…。它应该适合你。看起来需要logging.file
  • 谢谢! “logging.file”标志似乎用于配置日志文件位置。这与我的问题无关。我的最终目标是从 sds_ser 文件夹加载配置文件,例如 logback.xml。配置文件太多,命令行无法指定文件名。

标签: spring-boot


【解决方案1】:

如果您需要将自定义文件加载到 Spring Boot jar(uber jar)的类路径中,您可以通过在运行期间设置类路径来实现。

java -cp "/sds_ser/:/pathtoyourjar/service-0.0.1-SNAPSHOT.jar" -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=test org.springframework .boot.loader.JarLauncher

这是假设您的文件位于服务器上的路径 /sds_ser 中。 -Dloader.path 根据文档仅执行以下操作

loader.path 可以包含目录(递归扫描 jar 和 zip 文件)、存档路径、存档中的目录 扫描 jar 文件(例如,dependencies.jar!/lib),或 通配符模式(用于默认的 JVM 行为)。存档路径可以是 相对于 loader.home 或文件系统中的任何位置 jar:file: 前缀。

也根据以下网站

http://javarevisited.blogspot.in/2011/01/how-classpath-work-in-java.html

另外值得注意的是,当你使用 java -jar 命令行时 将您的 Java 程序作为可执行 JAR 运行的选项,然后 CLASSPATH 环境变量将被忽略,-cp 和 -classpath 开关将被忽略。

所以你必须给它运行的主类,即 org.springframework.boot.loader.JarLauncher

【讨论】:

    【解决方案2】:

    我使用以下内容从外部位置覆盖属性。

    @Configuration
    @PropertySource(value = "file:/var/tmp/${spring.application.name}/${MY_APP_PROFILE:h2}/conf/override.properties", ignoreResourceNotFound = true)
    class AppConfig {
        @Bean
        public PropertyPlaceholderConfigurer placeholderConfigurer() {
            PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
            configurer.setIgnoreUnresolvablePlaceholders(true);
            return configurer;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-08-18
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多