先在SpringBoot项目中新增一个MyApplicationContext.java文件,内容如下:
import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.boot.env.YamlPropertySourceLoader; import org.springframework.core.env.PropertySource; import org.springframework.core.io.InputStreamResource; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; public class MyApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { @Override public void initialize(ConfigurableApplicationContext applicationContext) { String activeProfile = applicationContext.getEnvironment().getProperty("spring.profiles.active"); if("uat".equals(activeProfile) || "prod".equals(activeProfile)){ YamlPropertySourceLoader loader = new YamlPropertySourceLoader(); try { String jbossHome = (String) applicationContext.getEnvironment().getSystemEnvironment().get("JBOSS_HOME"); PropertySource<?> propertySource = loader.load("externalConfiguration", new InputStreamResource(Files.newInputStream(Paths.get(jbossHome+"\\standalone\\configuration\\application-druid.yml")))).get(0); applicationContext.getEnvironment().getPropertySources().addLast(propertySource); } catch (IOException e) { throw new RuntimeException(e); } } } }
然后再resources的META-INF目录中创建一个spring.factories文件,内容需要指向到刚刚创建的MyApplicationContextInitializer类文件:
在系统中新建JBOSS_HOME环境并指向JBOSS的根目录:
然后在jboss的standalone\configuration目录中放置对应的配置文件:
然后启用jboss服务,此时springboot的war应用会优先到这个configuration目录中寻找对应的application配置文件,找不到时便会使用war包中的配置文件。