我有一些配置文件,与其他系统共享。因此,我想每次在应用程序启动之前通过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;
}
}