HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

Spring 应用性能调优

  • 2007-11-29
  • 本文字数:1581 字

    阅读完需:约 5 分钟

在来自 SpringSource 的一份新白皮书中,Adrian Colyer 说明了 Spring 所提供的运行时环境。

Spring 编程和配置模型已经得到很好的理解并有大量的文档,而且被全球数十万开发者所使用。这个白皮书是为管理 Spring 应用程序的运营团队而写的。

白皮书的第一部分回顾了 Spring 内核的核心职责,它们是: - 引导程序 —— 创建应用程序上下文,它为应用程序提供运行时上下文。

  • 决定组件配置 —— 决定哪些应用组件需要被创建、它们是怎样被配置的、以及它们需要什么样的支持服务。这个步骤也就是大家所熟知的蓝图(blueprint)阶段,这时决定了服务准备情况。
  • 实例化、配置及装配 —— 使用蓝图,组件现在可以在需要的时候被构造。这一阶段极为重要,因为 Spring 需要需要考虑组件间的依赖、特定顺序、以及构造机制。这一阶段的失败将导致应用程序不可操作。
  • 组件后处理(Post Processing) —— 调用被 Spring 企业级服务和用户服务器注册为后处理器的组件。
  • 装饰 —— 当使用 AOP 命名空间或标注类将横切组件行为描述、声明为 aspect 时,Spring 内核就有了额外的任务。所描述的切入点(pointcut)需要被许可,并为原始组件产生一个代理,以便用额外的功能装饰该组件。
  • 管理组件生命周期和范围 —— 由于组件可能有不同的生命周期和范围,Spring 内核将持续监视创建、重用和销毁组件。

白皮书中更有趣的部分涉及 Spring 应用程序性能调优。象其他任何应用程序一样,首先建议使用如 Apache JMeter、Selenium、JAMon 或利用 Spring AOP 或 AspectJ aspect 去测量一下性能。 > 于是最优化归结为两类:建立一个有效的蓝图(调优你的配置)、有效使用运行时设施(使你的应用设计最优化)。从一个干净且清晰的设计开始,充分利用 Spring 提供的设施,只在数据显示确实有好处的地方才无需遵循这一点。

建立一个有效的蓝图
为了建立一个有效蓝图,你需要利用你的部署平台,让环境依赖脱离 Spring 配置。当声明数据库连接和 JMS 连接时这一点尤为重要,那些利用 JNDI 的地方能使你充分利用你的部署平台设施。白皮书所提供的其他建议是: > Spring 的 PropertyPlaceholderConfigurer 非常适合将那些可能需要由运营团队修改的配置设定外部化。

而且 > 这里一个好的技巧是使用 Spring 的 JMX 输出(export)能力来定义一个 MBean,它通过 JMX 来暴露所有配置值。这使你能够连接到一个正在运行的应用程序上,并很容易看到它当前正在使用的配置值。

利用运行时最优化
许多产品运行时的性能问题都会被跟踪至持久层,拥有正确优化过的数据库和数据访问层是极其重要的。

  • 争取在 eager 和 lazy 装载策略之间找到恰当的平衡点
  • 在 log 中显示出 SQL 语句
  • 对于批量操作、大批更新或插入、以及存储过程,通常最好使用 JDBC(通过 Spring JDBC)而非 ORM 工具
  • 充分利用你的数据库所提供的特性
  • 如果你有一个包含完整持久性逻辑(并非业务逻辑)的操作,考虑将它作为存储过程移到数据库中,并通过 Spring JDBC 来调用
  • 只读引用数据可以被保持在内存缓存中

性能调优章节的结尾是从 SpringSource 的一些顾问那儿搜集的其他调优和最优化技巧的汇总:

  • Spring Batch 项目中支持的重试可以用来重试失败的操作(例如,在 Oracle RAC 中,一个在某一簇节点上已经失败的操作)。通过减少传播到最终用户失败的数量,可以减轻运营负担。
  • 不要低估 Web 内容展现的开销。你应该明确地在事务之外做这项工作。
  • 不要每次请求都实例化应用程序上下文(它是团队移植遗留应用到 Spring 上时不时会碰到的错误)。
  • 对可以在后台运行的任务,考虑使用 Spring 的异步任务执行器来减少用户等待时间。
  • 选择合适的远程协议。如果你不需要 SOAP 的互通性,一个简单方案(如 Spring 的 HttpInvoker 支持)将更快更简单。
  • 对影响大部分应用程序的 aspect,考虑使用 AspectJ 代替 Spring AOP。

完整的白皮书可以从 SpringSource 下载。 查看英文原文: Performance Tuning Spring Applications

2007-11-29 01:503216
用户头像

发布了 150 篇内容, 共 45.7 次阅读, 收获喜欢 10 次。

关注

评论

发布
暂无评论
发现更多内容

【我和openGauss的故事】可视化运维平台openGauss Datakit带你轻松玩转openGauss

daydayup

技术分享 | app自动化测试(Android)--高级定位技巧

霍格沃兹测试开发学社

技术分享 | 测试平台开发-前端开发之Vue.js 框架

霍格沃兹测试开发学社

倒计时2天 | 第六届openGauss技术文章征集活动最新初审合格名单(截至8.3)

daydayup

关于并发的一点思考

蓬蒿

并发 异步编程

8月征文:今天你 ARTS 打卡了吗?【中奖名单见文末】

InfoQ写作社区官方

ARTS 打卡计划 征文活动 热门活动

openGauss数据库源码解析系列文章—安全管理源码解析(五)

daydayup

技术分享 | Selenium多浏览器处理

霍格沃兹测试开发学社

Uiautomator2.0

霍格沃兹测试开发学社

悦数图数据库:发布 AI 大模型解决方案,开启「图+ 大模型」应用新范式

悦数图数据库

数据库 图数据库 分布式图数据库 NebulaGraph 悦数

ThreadLocal

红袖添香

Java ThreadLocal ThreadLocalMap Java 线程

【我和openGauss的故事】在vm中安装openEuler及使用yum安装openGauss

daydayup

MTK 2.9.2 迁移Oracle 11g 至 openGauss 5.0.0操作指南

daydayup

【我和openGauss的故事】openGauss 5.0.0企业版x86单机安装

daydayup

测试必会 Docker 实战(一):掌握高频命令,夯实内功基础

霍格沃兹测试开发学社

自动化实践-全量Json对比在技改需求提效实践

得物技术

json 自动化 测试 企业号 8 月 PK 榜

接口测试实战| GET/POST 请求区别详解

霍格沃兹测试开发学社

干货|app自动化测试之Capability 使用进阶

霍格沃兹测试开发学社

瓴羊Quick BI:数据大屏可视化展示,助企业提升竞争优势

巷子

【我和openGauss的故事】带有out参数的存储过程及自定义函数的重载测试

daydayup

2023-08-08:给你一棵 n 个节点的树(连通无向无环的图) 节点编号从 0 到 n - 1 且恰好有 n - 1 条边 给你一个长度为 n 下标从 0 开始的整数数组 vals 分别表示每个节

福大大架构师每日一题

左程云 福大大架构师每日一题 左神

不可错过!12个编写整洁Java代码的最佳实践方法

SoFlu软件机器人

5分钟,带你了解低代码开发

高端章鱼哥

低代码 数字化转型 应用开发

融云:从「对话框」跳进魔法世界,AIGC 带给社交的新范式

融云 RongCloud

人工智能 AI 通信 社交 AIGC

【我和openGauss的故事】为集群增加VIP

daydayup

瓴羊Quick BI在Gartner魔力象限中脱颖而出

夜雨微澜

干货|app自动化测试之Appium问题分析及定位

霍格沃兹测试开发学社

【我和openGauss的故事】使用Ora2Pg迁移oracle数据到openGauss

daydayup

鸿蒙生态加持 华为视频AiMax影院高品质再升级

最新动态

Jupyter Notebook 遇上 NebulaGraph,可视化探索图数据库

NebulaGraph

AI Jupyter Notebook 图数据库

Spring应用性能调优_Java_Ian Roughley_InfoQ精选文章