首页 > 应用开发 > IT综合 > Spring 应用合并之路(一):摸石头过河
公司最近一年在推进降本增效,在用尽各种手段之后,发现应用太多,每个应用都做跨机房容灾部署,则最少需要 4 台机器(称为容器更合适)。那么,将相近应用做一个合并,减少维护项目,提高机器利用率就是一个可选方案。
经过前后三次不同的折腾,最后探索出来一个可行方案。记录一下,分享出来,希望对有相关需求的研发童鞋有所帮助。下面按照四种可能的方案,分别做介绍。另外,为了方便做演示,专门整了两个演示项目:
这个方式,可能是给人印象最容易的方式。仔细思考一下,从维护性的角度来看,这个方式反而是最麻烦的方式,理由如下:
基于这些考虑,这种方式直接被抛弃了。
这是第一次尝试使用的方案。也是遇到问题最多的方案。
经过不断折腾,这种方式被迫放弃。
在经过上述方式折腾后,就想到了另外一个方案:可以考虑使用父子容器的方式来搞。接着就查到了这篇文章: Context Hierarchy with the Spring Boot Fluent Builder API。感觉这种方式挺不错,就尝试了一下。
package com.diguage.demo.boot;import org.springframework.boot.WebApplicationType;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.ImportResource;/**
* @author D瓜哥 · https://www.diguage.com
*/public class DemoBootApplication {
public static void main(String[] args) {
new SpringApplicationBuilder()
.parent(BootConfig.class).web(WebApplicationType.NONE)
.child(WebConfig.class)
// 如果有第三个项目,可以作为子容器的兄弟容器加载。
// .sibling(SiblingConfig.class)
.run(args);
}
@Configuration
@ImportResource({"classpath:spring-cfg.xml"})
@ComponentScan(basePackages = "com.diguage.demo.boot")
public static class BootConfig {
}
@Configuration
@ImportResource({"classpath:web/spring-cfg.xml"})
public static class WebConfig {
}}
|
|
Spring Boot 背后是否做了检查,这个是根据报错信息的猜测,没有翻看代码,所以这个猜测有一定的不确定性。有机会翻一下代码,查看一下具体原因。 |
革命尚未成功,且听下回分解……
下文: Spring 应用合并之路(二):峰回路转,柳暗花明
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70037994/viewspace-3042997/ ,如需转载,请注明出处,否则将追究法律责任。