SpringBoot项目多环境配置
SpringBoot 项目多环境配置
方法一:使用spring-boot-maven-plugin插件
优点:简单
缺点:把所有的libs都打包进去,整个jar包太大。上传到服务器非常慢。
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<version>${springboot.version}version>
<configuration>
<mainClass>${mainClass}mainClass>
<layout>jarlayout>
configuration>
<executions>
<execution>
<goals>
<goal>repackagegoal>
goals>
execution>
executions>
plugin>
plugins>
方法二:使用maven-dependency-plugin 和 maven-jar-plugin
优点:
1.把libs和myApp.jar 分开了,部署的时候只部署myApp.jar即可
2.打包后的样式效果和eclipse的export导出可执行jar打出的文件名称和jar包是一样的
myApp.jar
myApp_lib
<build>
<finalName>${build.jar.name}finalName>
<resources>
<resource>
<directory>src/main/resourcesdirectory>
<filtering>truefiltering>
<includes>
<include>*.ymlinclude>
<include>*.propertiesinclude>
<include>mapper/**/*.xmlinclude>
<include>static/**include>
<include>templates/**include>
<include>*.xmlinclude>
includes>
resource>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.ymlinclude>
<include>**/*.propertiesinclude>
<include>**/*.xmlinclude>
includes>
<filtering>falsefiltering>
resource>
resources>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<configuration>
<source>1.8source>
<target>1.8target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>${lombok.version}version>
path>
<path>
<groupId>org.mapstructgroupId>
<artifactId>mapstruct-processorartifactId>
<version>${org.mapstruct.version}version>
path>
annotationProcessorPaths>
configuration>
plugin>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-dependency-pluginartifactId>
<executions>
<execution>
<phase>prepare-packagephase>
<goals>
<goal>copy-dependenciesgoal>
goals>
<configuration>
<outputDirectory>target/${build.jar.name}_liboutputDirectory>
<overWriteReleases>falseoverWriteReleases>
<overWriteSnapshots>falseoverWriteSnapshots>
<overWriteIfNewer>trueoverWriteIfNewer>
<includeScope>compileincludeScope>
configuration>
execution>
executions>
plugin>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-jar-pluginartifactId>
<configuration>
<archive>
<manifest>
<mainClass>study.app.SpringApplicationmainClass>
<classpathPrefix>${build.jar.name}_libclasspathPrefix>
<addClasspath>trueaddClasspath>
manifest>
<manifestEntries>
<Class-Path>.Class-Path>
manifestEntries>
archive>
configuration>
plugin>
plugins>
build>
说明:
1. 生产的最终目录是这样的:
-myApplication_lib
-config/application.properties
-myApplication.jar
(1)与环境相关的配置文件都先放在服务器的config目下(与环境无关的公共配置仍然在jar中),而不需要根据profile依赖打包来上传。
因为配置是不会经常变的,所以没必要每次打包时还要考虑环境。
(2)myApplication_lib 目录下是jar包
2.maven-jar-plugin 插件打包后,其实是不能识别myApplication.jar外的config/application.properties
解决方法一:启动时通过spring.config.additional-location指定,优先级最高。
java -jar myproject.jar --spring.config.additional-location=classpath:/default.properties,classpath:/override.properties
解决方法二:maven-jar-plugin 增加配置
<manifestEntries>
<Class-Path>.Class-Path>
manifestEntries>
3.Spring Boot加载配置文件顺序?
https://docs.spring.io/spring-boot/docs/2.0.4.RELEASE/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties
SpringBoot配置文件加载优先级(数字小的优先:springBoot的处理是已存在就不加载):
- Devtools global settings properties on your home directory (
~/.spring-boot-devtools.properties
when devtools is active). @TestPropertySource
annotations on your tests.@SpringBootTest#properties
annotation attribute on your tests.- Command line arguments.
- Properties from
SPRING_APPLICATION_JSON
(inline JSON embedded in an environment variable or system property). ServletConfig
init parameters.ServletContext
init parameters.- JNDI attributes from
java:comp/env
. - Java System properties (
System.getProperties()
). - OS environment variables.
- A
RandomValuePropertySource
that has properties only inrandom.*
. - Profile-specific application properties outside of your packaged jar (
application-{profile}.properties
and YAML variants). - Profile-specific application properties packaged inside your jar (
application-{profile}.properties
and YAML variants). - Application properties outside of your packaged jar (
application.properties
and YAML variants). - Application properties packaged inside your jar (
application.properties
and YAML variants). @PropertySource
annotations on your@Configuration
classes.- Default properties (specified by setting
SpringApplication.setDefaultProperties
).
搜索配置文件时的顺序:
file:./custom-config/ 表示java启动时spring.config.additional-location指定才存在
classpath:custom-config/ 表示java启动时spring.config.additional-location指定才存在
file:./config/
file:./
classpath:/config/
classpath:/