ibatis里面的流控实现是通过Throttle这个类来实现,既信号量,实例化时指定最大的访问量,每次请求时从这里获取一个信号量,如果已经达到阈值将阻塞或者抛出异常,以免大量的请求导致服务当机,每次请求时申请一个,请求结束返回,既信号量的实现,代码如下
申请资源
public void increment() {
synchronized (LOCK) {
long totalWaitTime = 0;
while (count >= limit) {
if (maxWait > 0) {
long waitTime = System.currentTimeMillis();
try {
LOCK.wait(maxWait - totalWaitTime);
} catch (InterruptedException e) {
//ignore
}
totalWaitTime += System.currentTimeMillis() - waitTime;
if (totalWaitTime > maxWait) {
throw new RuntimeException("Throttle waited too long (" + totalWaitTime + " milliseconds) for lock.");
}
} else {
try {
LOCK.wait();
} catch (InterruptedException e) {
//ignore
}
}
}
count++;
}
}
释放资源
/**
* Remove a reference
*/
public void decrement() {
synchronized (LOCK) {
count--;
LOCK.notify();
}
}
客户端调用方式
/**
* Pop an object from the pool
* @return - the Object
*/
public Object pop() {
throttle.increment();
return pool.remove(0);
}
/**
* Push an object onto the pool
* @param o - the object to put into the pool
*/
public void push(Object o) {
if (o != null && o.getClass() == type) {
pool.add(o);
throttle.decrement();
}
}
分享到:
相关推荐
**Ibatis 框架原理实现** Ibatis 是一个优秀的持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,从而避免了Java代码与SQL的耦合,提高了开发效率。在这个自己编写的Ibatis框架实现中,我们可以看到类似的...
因此,我们需要通过修改Ibatis的源代码来实现物理分页,以提高查询效率。 物理分页是直接在数据库层面进行分页,避免了将所有数据加载到内存中的问题。下面我们将详细探讨如何在Ibatis中实现物理分页。 首先,了解...
Struts2 Spring iBATIS 架构 实现 Struts2 Spring iBATIS 架构 实现 Struts2 Spring iBATIS 架构 实现 Struts2 Spring iBATIS 架构 实现
本项目“spring+jotm+ibatis+mysql实现JTA分布式事务”旨在利用这些技术来确保在分布式环境中的数据一致性。下面将详细介绍这个项目所涉及的知识点。 首先,Spring框架是Java开发中最常用的应用框架之一,它提供了...
### iBATIS DAO事务管理实现 #### 一、概述 iBATIS DAO(Data Access Object)框架中的事务管理是该框架的重要组成部分之一。它不仅负责管理事务连接池,还能够处理多个ORM(Object Relational Mapping)环境下的...
在本篇文章中,我们将深入解析Ibatis的实现原理,探讨其核心功能、工作流程以及优势。 一、Ibatis的核心概念 1. SQL映射文件:Ibatis通过XML或注解方式定义SQL语句,这些语句被封装在SQL映射文件中。映射文件包含...
本篇将详细讲解如何利用Ibatis实现分页技术。 一、Ibatis简介 Ibatis是由Clinton Begin创建的一个SQL映射框架,它允许开发者将SQL语句直接写在配置文件中,通过Java接口与数据库进行交互,从而避免了传统的JDBC代码...
下面详细介绍如何利用ibatis实现高效的批量更新: 1. **准备工作**: - 首先确保你的ibatis版本支持批量更新功能。 - 在配置文件中启用批量更新功能。 2. **编写Mapper接口**: - 定义一个Mapper接口,并在其中...
Ibatis和Spring整合例子,实现增删改查功能.
本篇文章将详细讲解如何利用Ibatis实现数据的连接、增加、查询、删除和修改(CRUD)操作,以及.xml文件在SQL映射中的作用。 首先,Ibatis是一个轻量级的Java ORM(对象关系映射)框架,它的核心理念是将SQL语句与...
- `applicationContext.xml`是Spring的主配置文件,它定义了Spring容器中的bean,包括对Struts、Ibatis等其他框架的配置,实现各组件间的依赖注入。 - `codelist.xml`则可能包含了全局共享的bean,如`...
Ibatis通过XML或注解方式定义和配置SQL映射,将Java对象和数据库记录进行映射,实现了数据的CRUD操作。 在实现CRUD操作时,Ibatis有以下核心组件: 1. SQL Map配置文件:这是Ibatis的核心,用于存放SQL语句及其...
iBatis 中提供了多种方式来实现大于、小于、等于的判断。例如,我们可以使用 `<isGreaterThan>` 元素来判断参数是否大于某个值,使用 `<isLessThan>` 元素来判断参数是否小于某个值。 在上面的示例代码中,我们使用...
源码中`org.apache.ibatis.cache.Cache`接口定义了缓存的基本操作,而具体的缓存实现如`org.apache.ibatis.cache.impl.PerpetualCache`则实现了缓存的存储和读取。 通过阅读和理解iBatis的源码,我们可以更深入地...
2. **Mapper接口和XML映射文件**:Ibatis通过Mapper接口和对应的XML映射文件实现SQL的声明式编程。接口定义了方法,XML文件则包含具体的SQL语句和结果映射。例如,一个UserMapper接口可能会有`selectUser`方法,对应...
在本示例中,"ibatis实现增删改查功能demo"是一个具体的项目,旨在演示如何利用Ibatis进行数据库操作,包括插入(Insert)、删除(Delete)、更新(Update)和查询(Select)数据。以下将详细解析这个项目的重点内容...
本篇文章将详细讲解如何利用Spring+iBatis+JOTM来实现JTA事务。 首先,我们需要理解JTA的核心概念。JTA定义了一组接口和规范,允许应用程序在不同的事务边界之间进行协调,确保原子性和持久性。JOTM作为JTA的一个...
这个名为“ibatis实现的学生信息管理示例”的项目,旨在帮助初学者理解并掌握如何利用Ibatis来处理数据库操作,如CRUD(创建、读取、更新、删除)学生信息。下面将详细介绍Ibatis框架的基本概念、工作原理以及如何...
综上所述,这个实例展示了如何整合Struts2、Spring、iBatis和Oracle来构建一个完整的Web应用,实现了动态分页搜索和附件上传功能。这种架构具有良好的可扩展性和可维护性,适用于各种中大型企业级项目。开发者可以...