我们在项目中会用到多个环境配置,正式的,测试的,本地的之类的。
我们在springboot中可以通过很简单的配置来切换各种环境
一. 在pom文件中如下配置,profile文件指定打包启动加载的哪个配置文件,可根据环境的多少分别进行配置
<profiles>
<profile>
<id>prod</id>
<properties>
<profileActive>prod</profileActive>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profileActive>test</profileActive>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
</profiles>
二. resources中指定加载哪些文件,其中的include表示加载的哪些文件到容器中,如果没有指定所有的配置加载到容器中,在配置文件中的classpath:/**方式引用的文件不会加载到容器中,导致启动失败
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>application-${profileActive}.yml</include>
<include>application.properties</include>
<include>**/*</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimiter>@</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
</plugins>
</build>
三. 我们准备3个配置文件(在这里我只设置生产和测试的环境),在prod的配置环境中的name值为wj1,test的name值为wj2
并且在application.properties中配置active的值
四. 写一个controller类,来返回从配置文件中得到的name值
@RestController
public class Pro {
@Value("${name}")
private String name;
@RequestMapping("/qw")
public String t1() {
System.out.println("在此打印name:" + name);
return name;
}
}
五. 如果要在tomcat上运行的话,可以使用 mvn clean package -P XXX 来指定打包哪个配置文件
注意:如果要在外部容器上运行,应当注意各种各样的版本问题,并且你的springboot的程序
应当有 SpringBootServletInitializer
的子类,我们可以直接在启动类上继承并实现 SpringBootServletInitializer
的configure() 方法