在生产中使用弹簧靴有什么缺点?

时间:2019-01-03 06:30:02

标签: java spring spring-boot

我们的组织未采用弹簧靴。 所列举的缺点是罐子过大,控制和灵活性差。 我已经尝试调查以上几点,但到目前为止它们似乎无效。

  • 膨胀的罐子-T he spring blog指出一个简单的Web服务器 可以用10 MB的堆启动。
  • 控制和灵活性较低-Netflix使用spring 而且,当我做一些POC时,我没有遇到灵活性问题。

我想知道评估中是否有任何错误。
1)任何失去控制/灵活性的例子都是有帮助的。
2)我们需要知道哪些反模式,以便发生膨胀的罐子问题。

3 个答案:

答案 0 :(得分:2)

这通常是一个令人关注和负责任的问题。使用Spring引导,开发人员团队可以完全控制部署的环境,包括servlet容器配置。生产团队没有什么要调整的。

没有Spring引导,开发人员团队只能控制Web应用程序。生产可以/必须调整servlet容器配置。当您拥有大量不同的Web应用程序时,仅在生产团队中让这部分知识成为可能。在这种情况下,您将不会使用Spring Boot。

另一方面,如果托管已外部化,则Spring boot允许提供完整的软件包。

所以两种方法都可以使用,但是它们针对的是不同的组织。

答案 1 :(得分:0)

  

任何失去控制/灵活性的例子都是有帮助的。

  • 您需要熟悉Spring Boot应用程序中Bean的生命周期。不知道这可能会妨碍您使用Spring Boot。这将迫使您构造bean,以防止循环依赖和其他问题。
  • 在Spring Security中,配置其他登录方法并不是那么直观。
  • 在Spring Data JPA中,回购类要求您以特定方式命名方法以执行查询。锁定/释放数据行也不是很简单。
  • 等...
  

我们需要知道哪些反模式,以便发生发胀的广口瓶问题。

查看jar的依赖关系树。确保仅在需要的模块中添加依赖项。另外,删除不需要的依赖项。

答案 2 :(得分:0)

  • 膨胀的罐子-我认为可以通过使用诸如maven之类的构建工具正确维护罐子来解决此问题(但是,是的,在某些情况下,您可能需要添加很多只是因为春天需要而造成罐子)

  • 缺乏控制性和灵活性-我认为这通常是控制怪胎,他们想控制他们编写的每一段代码。如果您对spring已经提供的功能没问题,那应该不是问题。

我相信,使用spring可能遇到的最大缺点是在不了解它可能为项目增加什么价值的情况下使用它。

这可能完全不符合您的要求,并且有可能您会在某个时候自行配置所有内容,当您认为不应该从spring本身开始。

问自己几个问题,

  • 您可以创建独立的Java应用程序吗?为什么要首先使用Spring?它为您的项目增加了什么价值?

  • Spring嵌入了tomcat和码头,因此无需进行战争。但是,如果您仍然必须打仗怎么办?很少有配置可以解决问题,但这并不是主要优势。另外,当您将其作为Java服务启动时,如果以某种方式杀死Java进程,您的服务又会如何?

  • 如果您有许多旧版spring模块怎么办?如果需要修补该怎么办?这将增加jar数量以及旧类的数量。您确定要将其转换为Spring-boot应用程序吗?

  • 如果spring autoconfig配置不符合您的要求怎么办

而且,我本人在我们的一些生产应用程序中使用了spring-boot,这些应用程序大多是独立的REST API服务,并且没有遇到任何问题。

将是一些最佳做法,

  • 主要将Spring-boot用于微服务,而不是单个完整的(MVC)Web应用程序(我一直使用它来构建独立的REST API并使用ReactJS和NodeJS来构建UI。)

  • 将您的spring-boot应用程序构建为docker映像,并使用一些kubernates群集进行部署(kubernates将负责处理失败的docker容器并部署到新容器),以实现最长的正常运行时间。

  • 始终仅保留项目所需的jar,并删除不需要的jar。