组件化 Spring 启动应用程序的各个部分以通过放入罐子来提供新功能?



我有一个Spring Boot应用程序,我想转售给客户。我希望它作为多个功能的入口点/框架,这些功能可以随着时间的推移单独销售/添加。

理想情况下,可以将基础弹簧启动应用程序/jar 提供给用户。启动时,应用将扫描当前工作目录以查找任何 jar 文件。如果它找到 jar 文件,它会自动向用户提供基本应用程序中的功能。

可能有更好的方法可以做到这一点,但已经开发了基础弹簧启动应用程序,这似乎是一种合乎逻辑的方法。OSGI是这种情况的正确答案吗?

或者他们为Spring Boot应用程序提供组件化/捆绑功能的其他方法?

理论上OSGi更适合这种事情,因为它允许您在运行时安装新组件,而不需要重新启动。OSGi还通过设计提供了更好的机制,用于将功能封装在独立组件中。

但话虽如此,我不确定这是否是正确的方法。如果客户不再为您的组件付款,会发生什么情况?如果客户为组件付费,而您想出售更新并且他们不想付费,现在您必须支持多个版本等,会发生什么。

有很多方法可以考虑会使整个事情复杂化的场景。

据我所知,大多数产品都发货,然后您支付许可费。根据您购买的许可证,不同的功能将被"解锁"。

大多数情况下,这些许可证只是某种只有颁发者才能检查的"加密"密钥。想想公钥/私钥机制。我敢打赌还有更多选择。

最近,Gitlab工程团队发表了一篇关于这类主题的有趣博客文章:GitLab可能会迁移到单个Rails代码库。

如果你真的想这样做,你可能还想看看Java 9中引入的新Java模块系统。尽管看起来Spring Boot尚未100%支持此功能。

就我个人而言,在过去的9年里,我与OSGi合作,我可能会建议使用Spring Boot来做到这一点。这是基于一种主观感觉,即Spring Boot更现代一些,并且拥有更大的社区。目前没有OSGi框架(如Spring Boot)会让我兴奋地做一个项目,尽管OSGi的整体想法仍然很棒。但正如我所说,这是我的意见,不一定是"正确的"。

最新更新