2012-09-18 65 views
7

过去两年来,我一直在tomcat上使用java + spring,并且我的应用程序变得非常庞大。启动时间现在将近3分钟,在开发过程中会占用大量资源。如何在java中开发/部署BIG企业应用程序

所以我对如何使软件再次开发有趣的想法感兴趣。我已经看过Spring DM/Gemini蓝图,使它成为一个模块,但是体验并不方便。

现在将要添加更多模块,考虑开发另一个Web应用程序并使用Spring集成进行消息传递。显然,这将是一个非常痛苦的经验,在一台台式电脑上开发它。

有没有人有云开发经验?我如何改进所有这些时间和资源消耗任务?在云中开发会帮助我吗?

+0

真正的问题涉及到削减运行在开发机器上的tomcat的部署时间吗?你看过jRebel吗? – Affe

回答

8

这是典型的java + spring web应用程序非常常见的问题。随着年龄增长,他们开始变得臃肿,上下文加载开始变得痛苦。我可以建议一些指标来缓解这个问题,但只有你能够根据你的应用程序的具体情况来判断最适合你的问题。

  1. 在开发过程中不要严重依赖服务器。写入单元测试并在servlet容器之外运行它们。 Spring对此有着出色的支持。

  2. 在Rest/Soap Web服务中分​​解您的业务逻辑(审慎而谨慎地)。这使您可以独立于核心业务逻辑开发和测试用户界面。

  3. 如果使用maven/gradle,请尝试jetty插件。它可以继续扫描更改并自动重新加载webapp(我认为tomcat插件可以做同样的事情)。它具有在重新启动之间存储会话的能力,因此您不受重新启动的影响。请参阅此处了解更多详情How can I speed up Maven and Netbeans

  4. [付费选项]可能会尝试JRebel。

  5. 使用CI服务器,可持续集成/测试/部署您的应用程序,从您的开发人员机器中获取一些负载。

+0

谢谢!你的答案是我正在寻找的东西。我对CI服务器特别感兴趣。所以我们将开发另外两个独立的弹簧应用程序。 CI服务器将让我免于在本地计算机上运行两个并行应用程序的痛苦(它仍然有可能由于资源限制而不能成功运行)? – beku8

+1

我很高兴它有帮助。当您有良好的测试覆盖率时,CI服务器将真正发光。 CI服务器可以继续将应用程序部署到开发服务器,并且在本地机器上开发时,您可以在访问由其他应用程序提供的功能时指向通用开发服务器,以便您必须在本地只运行一个应用程序。 – kunal

8

首先,照顾瓶颈。随着他们的成长,他们倾向于进入项目。原始设计一次又一次地被破坏,以满足疯狂的最后期限,现在膨胀已经杀死了一次生动的应用程序。

不要猜测问题,而是使用真实数据来确定是什么让你的应用程序变慢。使用诸如jProfiler之类的剖析器:http://www.ej-technologies.com/products/jprofiler/overview.html

接下来,使用您学到的知识来提高新模块的效率。底线在变化技术不是一个解决方案,因为所有技术都可能出现瓶颈。你必须找到问题的原因并解决这个问题。

一旦你解决了瓶颈问题,你可以在新技术上创建一些测试项目,看看它是否更快,更容易,做你所需要的。但是,机会只是解决你当前堆栈上的问题就是所需要的。

+0

感谢您的评论,但我认为profilers更多的是与生产性能相关,而不是开发启动(这是我打算提出的原始问题)? – beku8