把握行业变革关键节点,12 月 19 日 - 20 日,AICon北京站即将重磅启幕! 了解详情
写点什么

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:503651
用户头像

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

关注

评论

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

MySQL中的DEFINER(定义者)是什么

Simon

MySQL

我看 JAVA 之 并发编程【三】java.util.concurrent.atomic

awen

Java 并发编程 Atomic 原子操作

经验分享:我是如何拿下微软、滴滴、百度等 20家大厂的 Offer?

Java 程序员 架构 面试 IT

Spring Boot 实战派,让开发像喝水一样简单!

Java 程序员 架构 面试 IT

Java测试框架九大法宝

FunTester

自动化测试 JUnit 测试框架 selenium testNG

使用Micronaut框架构建一个微服务网络.

Java 编程 架构 面试 程序人生

spring cloud 在国内中小型公司能用起微服务来吗?

Java 程序员 架构 面试 IT

2021 斩获 90K 月薪的 Spring 全家桶:文档 + 面试题 + 学习笔记 + 思维导图

编程 架构 微服务 IT 计算机

毕业六年本科,去年疫情期间备战二个月,阿里巴巴四面成功!定级 P7

Java 程序员 架构 面试 IT

Compose 编程思想

Changing Lin

8月日更

接口返回值一定不允许使用枚举类型吗?

skow

Java 面试 后端 开发规范

惠及百万用户 医保“上云”有了新思路

云计算

高频面试题-请把Java垃圾回收器说清楚

Java 编程 架构 面试 JVM

面试进阶齐飞!霸榜GitHub的 Java 全栈笔记太香了!

Java 编程 程序员 IT 计算机

你真的懂语音特征吗?

华为云开发者联盟

语音 音频 声学 时域图 时域

C++ Vector

若尘

c++ vector 8月日更

台达AS228T_CanOpen_VFD_X

林建

台达 AS228T Canopen 功能块 E变址

xposed 入门之修改手机 IMEI

Qunar技术沙龙

android 程序员 App 经验分享 安卓

收获颇丰!这份阿里架构师纯手敲JDK源码全彩小册可以打满分

Java架构追梦

Java 阿里巴巴 架构 面试 jdk源码

Java 程序性能优化“学习日记”

Java 编程 面试 IT 计算机

“助力金九银十”25 大Java后端面试指南,3000道面试题解析

Java 编程 程序员 面试 IT

渣本全力以赴33天,四面阿里妈妈(淘宝联盟),拿下实习岗offer

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

从技术到文案,还回技术么?

escray

学习 极客时间 朱赟的技术管理课 8月日更

Python代码阅读(第7篇):列表分组计数

Felix

Python 编程 Code Programing 阅读代码

孩子排斥写作业 VS 员工不接活儿——项目管理来帮忙

Ian哥

这波性能优化,太炸裂了!

why技术

Java 性能优化 JVM

Tensor:Pytorch神经网络界的Numpy

华为云开发者联盟

神经网络 数组 PyTorch Numpy Tenso

Apache之道在腾讯的探索与实践

腾源会

Apache 开源 腾源会 腾讯开源

为什么安全性在托管中变得越来越重要

九河云安全

算法有救了!GitHub 上神仙项目手把手带你刷算法,Star 数已破500k

Java 编程 程序员 面试 算法

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