项目在部署的时候不想把配置文件打进包里,读取外部配置文件,会更灵活。
Jar包
SpringBoot打JAR包时,默认从以下四个位置读取,后面的位置会覆盖前面的位置,所以配置文件可以放在外部读取,打包时排除配置文件不打进jar里,配置读取外部即可:
- jar包同级的config文件夹里
- jar包同级的文件夹里
- classpath(对应开发目录src/main/resources里)的config文件夹
- classpath(对应开发目录src/main/resources里)文件夹
Maven排除配置文件配置:
<build>
<plugins>
<!-- 打出jar包引用关联包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass></mainClass>
</manifest>
</archive>
<excludes>
<exclude>config/**</exclude>
</excludes>
</configuration>
</plugin>
<!-- 将依赖包放到lib文件夹中 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
然后在启动脚本java -jar时设置外部配置文件位置-Dspring.config.location=xxx:
nohup java -Dspring.config.location=/home/gear/dz-facesign/app-service/service-conf/ -jar app-service-1.0-SNAPSHOT.jar >> app-service.log &
War包
对于war包可以通过以下方式来读取外部配置文件:
- 在外部tomcat启动脚本catalina.sh中设置jvm启动参数,添加spring.config.location指定自定义的外部地址(相当于指定classPath地址),这种方式优先级最高。
JAVA_OPTS="-Dspring.config.location=/home/gear/dz-facesign/app-web/web-conf/ -server -XX:PermSize=256M -XX:MaxPermSize=512m "
3. 在外部tomcat中conf目录下的catalina.properties中的common.loader添加自定义的外部文件地址。
common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar","自定义地址"