我有一些配置文件,与其他系统共享。所以,我希望每次在应用程序启动之前通过Git同步这些文件。该应用程序已存档到Spring-boot JAR文件。
首先,我做了一个实验。我试图从外部目录加载logback配置文件:logback.xml。根据springboot doc 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的目录。哪个服务-0.0.1-SNAPSHOT.jar.But启动失败,无法找到logback.xml!
任何人都可以提供帮助吗?谢谢!
答案 0 :(得分:0)
我使用以下内容覆盖外部位置的属性。
@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;
}
}
答案 1 :(得分:0)
如果需要将自定义文件加载到spring boot jar(超级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:prefix。
另据以下网站
http://javarevisited.blogspot.in/2011/01/how-classpath-work-in-java.html
当您使用java -jar命令行时,还值得注意 将Java程序作为可执行JAR运行的选项,然后是 CLASSPATH环境变量将被忽略,而且-cp和 -classpath开关将被忽略。
所以你必须给它运行的主类,即org.springframework.boot.loader.JarLauncher