以下源码涉及bladex-tool下的blade-core-launch模块的BladeApplication类。
一、该问题的重现步骤是什么?
1. 设置`spring.profiles.active=dev,mysql`;
2. 启动应用。
二、你期待的结果是什么?实际看到的又是什么?
期望是应用能够激活dev和mysql两个Profile,但实际会报错:
同时存在环境变量:[dev,mysql]
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
Bladex 3.1.1.RELEASE
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
// 拿到全部激活Profile,dev,mysql String[] activeProfiles = environment.getActiveProfiles(); // 转list,dev,mysql Listprofiles = Arrays.asList(activeProfiles); // 预设三种环境 List presetProfiles = new ArrayList(Arrays.asList("dev", "test", "prod")); // 取交集后,presetProfiles只剩dev,profiles还是dev,mysql presetProfiles.retainAll(profiles); // 激活的profile,dev,mysql List activeProfileList = new ArrayList(profiles); Function
我理解框架应该是支持这种激活多Profile的,但是激活的多个Profile只能有一个是预设的Profile,也就是最多只能由dev、test、prod中的一个,至于其它非预设的Profile则没有限制。
因此我尝试做如下改写:
// 获取配置的环境变量 String[] activeProfiles = environment.getActiveProfiles(); // 判断环境:dev、test、prod Listprofiles = Arrays.asList(activeProfiles); // 预设的环境 List presetProfiles = new ArrayList<>(Arrays.asList(AppConstant.DEV_CODE, AppConstant.TEST_CODE, AppConstant.PROD_CODE)); // 交集 presetProfiles.retainAll(profiles); // 当前使用 List activeProfileList = new ArrayList<>(profiles); Function
blade.env只能指定一个。
如果有新环境的配置文件,这里也要新建一个新环境的日志配置文件。
问题不在这里,我的改动也不会改变blade.env只能有一个的逻辑,且blade.env还是只能是dev、test、prod中的一个。
但有时我们可以把某部分配置另外放一个配置文件,比如我们有application-dev.yaml的同时,我们把数据库连接的配置放在另一个文件application-mysql.yaml中。正常Spring Boot应用可以通过spring.profiles.active=dev,mysql激活两个配置文件,参见Spring Boot Profiles
扫一扫访问 Blade技术社区 移动端