为Java / Spring / Tomcat Web应用程序淘汰MongoDB或Couch的Hibernate / Mysql

我有一个正在进行大规模返工的应用程序,我一直在探索不同的选项 – “按原样”进行调整,在不同的框架或平台中重做项目等.当我真的想到它时,这里有三个我不喜欢java的主要内容:修改控制器或其他类时服务器启动/停...

我有一个正在进行大规模返工的应用程序,我一直在探索不同的选项 – “按原样”进行调整,在不同的框架或平台中重做项目等.

当我真的想到它时,这里有三个我不喜欢java的主要内容:

>修改控制器或其他类时服务器启动/停止.动态语言在这里是对Java的巨大胜利.
> Hibernate,Lazyloading异常(特别是在异步服务调用或Jackson JSON编组期间发生的异常)和ORM膨胀. Hibernate本身就是缓慢的集成启动时间和极其缓慢的应用程序启动时间的原因.
> Java愚蠢 – 与Tomcat相比,在IDE中运行应用程序时出现的类加载问题不一致.一旦你解决了这些问题,你很可能再也看不到它们了.即便如此,其中大部分都是由Hibernate引起的,因为它坚持使用特定的Antlr版本等等.

在思考问题之后……如果我摆脱Hibernate,我可以解决或至少改善所有这三个方面的情况.

你们有没有重新设计过50个实体java应用程序来使用mongo或沙发或类似的数据库?经历是什么样的?你推荐它吗?假设你有一些非常棒的单元/集成测试需要多长时间?这个想法听起来比实际更好吗?

如果我可以存储文档,我的应用程序实际上会在许多方面受益.它实际上会为这个应用程序打开一些非常酷和有趣的功能.但是,我确实希望能够为复杂的搜索创建动态查询……而且我被告知Couch不能这样做.

对于NoSQL数据库,我真的很环保,所以任何有关迁移(或不迁移)大型java / spring项目的建议都会非常有用.另外,如果这是一个好主意,你会推荐哪些书籍让我加快速度,并以最好的方式真正利用它们来应用这个应用程序?

谢谢

解决方法:

无论如何,你的咆哮不仅仅包括先前为Hibernate做出的(传统)决定的问题,还包括你作为程序员的开发.

如果类似的项目放在我的膝盖上并且急需重构或改进,我就会这样做.

这取决于软件生命周期的阶段以及如果您要进行重大更改或坚持使用较小的更改所涉及的时间压力.然而,从长远来看,以增量进行迁移似乎是您的最佳选择.

保持短期内用Java编写的应用程序似乎是明智之举,另一种语言的重大改写肯定会破坏接受和集成测试.

像约瑟夫建议的那样,从Hibernate迈向JPA.它不应该花费太多时间.从那里你可以将后端切换到其他一些存储方式.努力解决问题.选择看起来最好的概念,有些人更喜欢MVC而其他人可能会选择CQRS,还有一些人喜欢另一种分割/分离方式.

由于JVM支持多种语言,因此您始终可以切换到其中任何一种语言,或者至少部分地以更动态的语言实现功能.这将解决部分问题,即您不断碰到Java的“愚蠢”,同时仍然保留当前JVM在运行时的出色优化.

此外,您可能希望设置自动集成测试…因为希望永远不会从IDE运行应用程序,所以这些测试将为您提供真实的结果.

旁注:如果IDE具有将自己的库注入构建或运行时路径的功能,我从不相信我的IDE能够正确获取依赖关系.

简而言之:小步骤;失去Hibernate并对JPA更加抽象;如果Java变得愚蠢,那么逐渐转向一种聪明的语言.您主要关注的是重构代码库而不会丢失功能,请记住,开放式设计将使以后更容易添加有趣和酷炫的功能.

本文标题为:为Java / Spring / Tomcat Web应用程序淘汰MongoDB或Couch的Hibernate / Mysql

基础教程推荐