@RequestController之数据源与连接池使用及说明

 更新时间:2026年01月23日 09:02:23   作者:追JAVA的小菜鸟  
文章总结:介绍了Spring MVC中的@Controller和@ResponseBody注解以及@RequestMapping注解的使用方法,详细讲解了数据源、连接池的概念及其在Java项目中的应用,包括JNDI、DBCP、C3P0和Druid等连接池的配置和特点

一、@RequestController————类

  • 继承自@Controller
  • 向页面发送JSON格式信息
  • 相当于@Controller+@ResponseBody————在页面显示数据

@Controller————类

  • 跳转到页面

@ResponseBody————类/方法

  • 返回json数据
  • 用于异步获取数据——在页面显示数据

@RequestMapping————方法(必需!!)

  • 访问路径:/h1

二、数据源与连接池

JNDI

  • 概念:Java Naming and Directory Interface————JAVA命名和目录接口
  • 作用:为JAVA应用程序提供命名和目录访问服务的API接口。
  • 详解:将Java对象以某个名称的形式binding绑定到一个容器环境Context中,以后调用容器环境的lookup查找方法可以查找出某个名称所绑定的Java对象。
  • 在真实的项目应用中,通常是由系统程序或框架程序先将资源对象绑定到JNDI环境中,以后在该系统或框架中运行的模块程序就可以从JNDI环境中查找这些资源对象了。
  • 优点:这种方式极大的增强了系统的可维护性
  • 容器环境Context也是一个Java对象,它也可以通过一个名称绑定到另一个容器环境Context中。这就形成了一种父子级联关系,多个Context对象最终可以级联成一种树状结构,树中的每个Context对象中都可以绑定若干个Java对象。

Tomcat服务器在启动时可以创建一个连接到某种数据库系统的数据源DataSource对象,并将该数据源对象绑定到JNDI环境中,以后在这个Tomcat服务器中运行的Servlet和JSP程序就可以从JNDI环境中查询出这个数据源对象进行使用。

数据源DataSource

  • 概念:连接数据库,创建Connection连接对象。
  • 是数据库对编程提供的一个接口,每个数据源对应一个数据库。
  • 内容:存储了所有建立数据库连接需要的信息。eg:username,pwd等

类似于通过指定文件名称可以在文件系统中找到文件一样,通过提供正确的数据源名称,能找到相应的数据库连接。算是对数据库的一个抽象映射。

连接池

  • 概念:存放数据库连接对象的一个缓冲池,需要数据连接时从缓冲池中取。
  • 作用:管理数据源
  • 操作过程:当一个线程需要用JDBC对一个数据库操作时,将从池中请求一个连接。当这个连接使用完毕后,将返回到连接池中,等待为其他的线程服务。

连接池分类

  • DataSource用来取代DriverManager来获取Connection,获取速度快,同时可以大幅度提高数据库访问速度。
1. DBCP
  • Tomcat内置的连接池(Tomcat Dbcp)
  • apache上的一个 java连接池项目,也是 tomcat使用的连接池组件。单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar
  • 特点:DBCP没有自动的去回收空闲连接的功能。

DBCP配置文件——dbcp.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true&useServerPrepStmts=false
username=root
password=abc123
2. C3P0
  • C3P0是一个开源的jdbc连接池,它实现了数据源和JNDI绑定。
  • C3P0是异步操作的,缓慢的jdbc操作通过帮助进程完成。扩展这些操作可以有效的提升性能。目前使用它的开源项目有Hibernate,Spring等。
  • 特点:C3P0有自动回收空闲连接功能。

获取方式

//使用C3P0数据库连接池的配置文件方式,获取数据库的连接:推荐
private static DataSource cpds = new ComboPooledDataSource("helloc3p0");
public static Connection getConnection2() throws SQLException{
	Connection conn = cpds.getConnection();
	return conn;
}

c3p0配置文件——c3p0.properties

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<named-config name="helloc3p0">
		<!-- 获取连接的4个基本信息 -->
		<property name="user">root</property>
		<property name="password">abc123</property>
		<property name="jdbcUrl">jdbc:mysql:///test</property>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		
		<!-- 涉及到数据库连接池的管理的相关属性的设置 -->
		<!-- 若数据库中连接数不足时, 一次向数据库服务器申请多少个连接 -->
		<property name="acquireIncrement">5</property>
		<!-- 初始化数据库连接池时连接的数量 -->
		<property name="initialPoolSize">5</property>
		<!-- 数据库连接池中的最小的数据库连接数 -->
		<property name="minPoolSize">5</property>
		<!-- 数据库连接池中的最大的数据库连接数 -->
		<property name="maxPoolSize">10</property>
		<!-- C3P0 数据库连接池可以维护的 Statement 的个数 -->
		<property name="maxStatements">20</property>
		<!-- 每个连接同时可以使用的 Statement 对象的个数 -->
		<property name="maxStatementsPerConnection">5</property>

	</named-config>
</c3p0-config>
3.Druid
  • Druid是一个开源项目,源码托管在github上。
  • 阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池,只要在web.xml中或spring的配置文件中加以配置即可。
  • 据说是目前最好的连接池

Druid配置文件——druid.properties

url=jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true
username=root
password=123456
driverClassName=com.mysql.jdbc.Driver

initialSize=10
maxActive=20
maxWait=1000
filters=wall

总结

  • 数据源连接数据库,创建连接对象。
  • 连接池是用来管理池中的连接对象。

连接池就像数据源的代理人,我们需要连接直接找连接池要,不用的连接也是直接还给连接池。

  • 数据源:水管
  • 连接池:水站
  • 数据库:水站源头
  • JNDI:水站门牌

获取数据时,通过找到JNDI,找到连接池,再找到连接对象和对应的数据库。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解如何解析pom文件方法示例

    详解如何解析pom文件方法示例

    这篇文章主要为大家介绍了详解如何解析pom文件方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • SpringBoot整合MP通过Redis实现二级缓存方式

    SpringBoot整合MP通过Redis实现二级缓存方式

    这篇文章主要介绍了SpringBoot整合MP通过Redis实现二级缓存方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 浅谈spring容器中bean的初始化

    浅谈spring容器中bean的初始化

    下面小编就为大家带来一篇浅谈spring容器中bean的初始化。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • Java基础学习笔记之数组详解

    Java基础学习笔记之数组详解

    这篇文章主要介绍了Java基础学习笔记之数组,结合实例形式详细分析了java的基本概念、定义、迭代、输出、反转、排序等常用操作技巧,需要的朋友可以参考下
    2019-08-08
  • Java枚举的使用方法详解

    Java枚举的使用方法详解

    这篇文章主要介绍了 Java枚举的使用方法详解的相关资料,希望通过本文大家能掌握枚举的使用方法,需要的朋友可以参考下
    2017-09-09
  • 举例讲解Java中数组和字符串类型的使用方法

    举例讲解Java中数组和字符串类型的使用方法

    这篇文章主要介绍了举例讲解Java中数组和字符串类型的使用方法,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • Java中Synchronized锁的使用和原理详解

    Java中Synchronized锁的使用和原理详解

    这篇文章主要介绍了Java中Synchronized锁的使用和原理详解,synchronized是 Java 内置的关键字,它提供了一种独占的加锁方式,synchronized的获取和释放锁由JVM实现,用户不需要显示的释放锁,非常方便,需要的朋友可以参考下
    2023-07-07
  • Java Spring Bean的生命周期管理详解

    Java Spring Bean的生命周期管理详解

    这篇文章主要为大家介绍了Java Spring Bean的生命周期管理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • java理论基础函数式接口特点示例解析

    java理论基础函数式接口特点示例解析

    这篇文章主要为大家介绍了java理论基础函数式接口特点示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Java文件操作之按行读取文件和遍历目录的方法

    Java文件操作之按行读取文件和遍历目录的方法

    这篇文章主要介绍了Java文件操作之按行读取文件和递归遍历目录的方法,遍历目录文中分别举了递归和非递归的例子,需要的朋友可以参考下
    2016-03-03

最新评论