springboot多环境(devlop、test、product)配置

多环境的配置

定义一个获取配置文件的方法,让环境变量决定调用哪个配置文件 :

  1. 核心思想: 定义一个私有方法,读取环境变量里的一个自定义属性,让这个属性决定服务器调用哪个配置文件,从而达到无需修改代码和配置文件就可以实现调用不同配置文件的目的;
  2. 基本组成:环境变量、tomcat启动入口、命令和jar包运行入口、配置文件选择器和配置文件;
  3. 优点:服务器调用不同的配置文件无需修改代码和配置文件,只需要配置环境变量即可,一定程度上降低了开发难度;

实例演示

//启动类的编写
@SpringBootApplication
public class ServiceApplication extends SpringBootServletInitializer {
	
	//服务器配置文件类型
	private static final List<String> DEPLOY_ENV = Arrays.asList("develop","test","product");
	
	//通过tomcat容器托管的服务器入口,使用profiles方法来决定加载那一个配置文件
	@Override
	protected SpringApplicationBUilder configure(SpringApplicationBuilder application){
		return application.sources(ServiceApplication.class).profiles(getProfile());
	}

	//这个是通过命令或者打包成jar直接运行的入口,配置文件选择方式和上述一样
	public static void mian(String[] args){
		new SpringApplicationBuilder()
			.sources(ServiceApplication.class)
			.profiles(getProfile())
			.run(args);
	}

	//获取设置的系统环境变量,然后决定加载那一个配置文件
	private static final String getProfile(){
		Map<String,String> environment = System.getEnv();
		String env = environment.get("PROFILE_OF_ENV");
		String profile = (env!=null && DEPLOY_ENV.contains(env) ? env : "develop");
		return profile;
	}
}

application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境
具体调用哪个配置文件,由 profiles() 方法决定,可以通过 getProfile() 方法读取环境变量进行配置 。
在这里插入图片描述

	//环境变量
	变量名(N): PROFILE_OF_ENV
	变量值(V): "develop"	  

通用的多环境配置方式

application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境
至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应{profile}值。
在这里插入图片描述
如:spring.profiles.active=devlop就会加载application-develop.properties配置文件内容 ,这种每次配置一个新的环境都需要对application.properties文件进行修改,比较麻烦。

个人总结和使用场景

在后端开发中,应用程序在不同的环境可能会有不同的配置,例如数据库连接、日志级别等,开发,测试,生产每个环境可能配置都不一致。
个人觉得通过环境变量来决定调用哪个配置文件比较方便,设置好后不需要对配置文件进行修改。

猜你喜欢

转载自blog.csdn.net/weixin_43935907/article/details/86683391
今日推荐