如何从Springboot中的外部目录加载属性/配置文件



我有一些配置文件,与其他系统共享。因此,我想每次在应用程序启动之前通过git同步这些文件。该应用程序已存档到Spring-Boot Jar文件。

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

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..jar.ut启动失败一起,logback.xml找不到!

有人可以提供帮助吗?谢谢!

如果您需要将自定义文件加载到Spring Boot Jar(Uber Jar)的类Path(Uber Jar)的类中,则可以通过在运行期间设置Class Path。

java -cp"/sds_ser/:/pathtoyourjar/service-0.0.0.1-snapshot.jar" -djava.security.egd = file = file:/dev//urandom -dspring.profiles.profiles.profiles.Active = test org.springframeframework.springframeframeframework.springframeframework.boot.loader.jarlauncher

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

loader.path可以包含目录(递归扫描 jar和zip文件),存档路径,一个存档中的目录 扫描JAR文件(例如,依赖项.jar!/lib)或 通配符模式(默认的JVM行为)。档案路径可以是 相对于loader.home或文件系统中的任何地方 jar:文件:前缀。

也按以下网站

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

也值得注意的是,当您使用Java -jar命令行时 选项将您的Java程序作为可执行JAR,然后 classPath环境变量将被忽略,也将是-CP和 -ClassPath开关将被忽略。

因此,您必须为此提供主要类,即org.springframework.boot.loader.jarlauncher

i使用以下内容来从外部位置进行覆盖属性。

@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;
    }
}

最新更新