什么是数据源?
就是用来创建连接的,和DriverManager一样,只不过数据源(DataSource)
他的优势是:创建连接的速度快,通过DataSource创建的Connection是被包裹后的,他的close方法已经被修改,他close是放到池里面去,而数据源内部会有一个连接池,而我们的程序之和数据源打交道,不会直接访问到连接池,因为的池是包内有好,而我们的程序一般和开源组织提供的类肯定不是在同一个包下,所以我们访问不到。
public class MyDataSource{
private static String url = "jdbc:mysql://localhost:3306/jdbc";
private static String user = "root";
private static pwd = "";
private List<Connection> connsPool = new LinkedList<Connection>();
public MyDataSource(){
try{
for(int i=0;i<10;i++){
this.connsPool.addLast(this.createConnection()); //加到最后,这是先进先出的算法
}
}catch(SQLException e){
throw new ExceptionInInitializerError(e); //因为在初始化的时候就出现异常,这是很严重的,所以要让调用它的那层知道,所以需要向上抛
}
}
public Connection getConnection(){
return this.connsPool.removeFirst();//从前面拿到
}
private Connection createConnection() throws Exception{
return DriverManager.getConnection(url,user,pwd);
}
public void free(Connection conn){
this.connsPool.addLast(conn);
}
}
然后在jdbcUtils中加上一个属性,也就是让jdbcUtils问MyDataSource要连接
public Connection getConnection(){
return myDataSource.getConnection();
}
public void free(Connection conn){
return myDataSource.free(conn);
}
//---下面改造这个Conn,我们使用代理来完成这个工作,在连接池里面就创建出代理,然后我们的代理调用close方法是来把资源放回去
class MyConnection implements Connection{ //伪装成Conn
Connection conn ;
MyDataSource dataSource;
MyConnection(Connection conn,MyDataSource dataSource){ //注意,如果不写public那么是包友好,这样的话,别人是拿不到MyConnection的
this.conn = conn;
this.dataSource = dataSource;
}
public void close(){
this.dataSource.connsPool.addLast(this);
}
。。。。。
}
public class MyDataSource{
private static String url = "jdbc:mysql://localhost:3306/jdbc";
private static String user = "root";
private static pwd = "";
private static int initCount = 5;
private static int maxCount = 10;
private int currentCount = 0;
private List<Connection> connsPool = new LinkedList<Connection>();
public MyDataSource(){
try{
for(int i=0;i<initCount;i++){
this.connsPool.addLast(this.createConnection());
currentCount ++;
}
}catch(SQLException e){
throw new ExceptionInInitializerError(e);
}
}
public Connection getConnection(){
synchronized(connsPool){
if(this.connsPool.size()>0){
return this.connsPool.removeFirst();
}else if(this.currentCount < maxCount){
this.currentCount ++;
return this.createConnection();
}
throw new SQLException("已经没有可用的连接");
}
}
private Connection createConnection() throws Exception{
Connection conn = DriverManager.getConnection(url,user,pwd);
Connection conn = new MyConnection(conn,this); //把包装类给别人。。。。这个地方不同了
return conn;
}
public void free(Connection conn){
this.connsPool.addLast(conn);
}
}
//---------------下面是开源的阿帕奇写的DBCP--------------------------------------
1.使用DBCP必须用的三个包
commons-dbcp-1.2.1.jar
commons-pool-1.2.jar
commons.collections-3.1.jar
2.配置--XX.properties
3.java API
BasicDataSourceFactory.createDataSource(prop);
分享到:
相关推荐
2. **配置Dbeaver**:在Dbeaver中,创建一个新的Hive数据源,然后在“Driver Settings”中选择或添加新的JDBC驱动,上传下载的JAR文件。 3. **设置连接参数**:填写Hive服务器的URL(例如,`jdbc:hive2://hostname:...
- HikariCP:被誉为“最快的Java JDBC连接池”,以其高效和低延迟而闻名。 - Druid:阿里巴巴开源的数据库连接池,提供了监控和扩展功能,广泛应用于各种Java Web项目。 ### 3. 配置数据源连接池 以HikariCP为例,...
驱动文件通常为`mysql-connector-java.jar`,支持连接池配置、SSL连接等特性。 3. **H2 Database JDBC Driver (H2)**:H2是一个轻量级、高性能的开源嵌入式和服务器模式的SQL数据库,适用于测试和开发。其JDBC驱动...
常见的连接池实现包括 HikariCP、C3P0 和 DBCP 等。 ##### 4.2 参数优化 对于大型应用,还可以通过调整数据库参数来进一步优化性能。例如,增加 `maxPoolSize` 参数以支持更多并发连接,或者调整 `maximumPoolSize...
4. **配置文件**:在Java EE应用中,通常需要在`web.xml`或者应用服务器的配置文件中指定JDBC驱动类和数据库连接信息,如数据源(DataSource)配置。例如,设置`driverClassName`为`...
5. `<jdbc:dataSource>`:定义数据源,可以配置连接池信息,如C3P0、Apache DBCP、HikariCP等。 6. `<jdbc:script>`:执行SQL脚本,可以用于初始化数据库结构或数据。 7. `<tx:annotation-driven>`:启用基于注解的...
Java JDBC 连接池大礼包包含了对数据库进行高效管理的必要知识,主要涉及Java数据库连接(JDBC)以及连接池的概念和技术。JDBC是Java语言访问数据库的标准接口,而连接池则是优化数据库操作的一种策略,它能提高应用...
本文将详细介绍如何在Tongweb5中配置JDBC连接池,以及Web应用如何通过JNDI(Java Naming and Directory Interface)查找并使用这些数据源。 首先,我们需要了解JDBC连接池的基本原理。JDBC连接池是在应用启动时预...
Weblogic JDBC 数据源配置和详细参数说明 一、JDBC 概述 ...本文详细介绍了 Weblogic 8.1 中 JDBC 数据源的配置和详细参数说明,包括连接池、数据源、JDBC 驱动程序设置、配置 JDBC 连接池等内容。
5. **JDBC连接池**: 在实际应用中,为了提高性能和资源利用率,通常会使用连接池来管理数据库连接。例如,C3P0、HikariCP、Apache DBCP等。连接池预先初始化一些数据库连接,当需要时可以从池中获取,用完后归还,...
在企业级应用开发中,数据源连接池是关键组件之一,它能有效地管理数据库连接,提高系统的性能和可扩展性。WebLogic Server,作为Oracle公司的一款成熟的企业级应用服务器,提供了强大的数据源(DataSource)连接池...
首先,Tomcat JDBC连接池是Apache Tomcat项目的一部分,它提供了对JDBC数据源的管理,旨在提高数据库连接的效率和资源利用率。在7.0.42版本中,该库已经相当成熟,能够有效地处理并发请求,提供各种性能调整选项,...
为了提高应用性能并确保资源的有效利用,通常会使用数据源连接池技术来管理和复用数据库连接。本文将详细介绍如何在Java Web应用中配置常用的数据库连接池,并通过具体示例来展示配置过程。 #### 二、数据源连接池...
2. **C3P0**: C3P0是一个强大的JDBC连接池管理工具包,提供了完整的JDBC连接池实现,支持JDBC 3 规范和JDBC 2 的标准扩展。 - **特点**: - 支持JNDI、支持XML配置文件。 - 内置缓存Statement功能。 - 支持连接...
这个数据源是Tomcat内建的一种连接池,它在性能和内存管理上比标准的Java JDBC连接池更优秀,尤其适用于高并发的Web应用。 标题中提到的"tomcat-jdbc.jar"和"tomcat-juli.jar"是使用Tomcat-jdbc数据源所必需的两个...
本项目——"spring-boot-easy-connection-pool-master",主要探讨了如何在Spring Boot环境下配置和管理连接池,并且实现了动态配置多数据源的功能,这对于大数据部门和数据中台服务尤其重要。 首先,让我们深入理解...
通过配置数据源,可以在应用服务器中实现连接池的管理。 3. **JDBC URL**: Oracle JDBC URL通常以`jdbc:oracle:thin:@`开头,后面跟随的是服务器主机名、端口号和服务名。例如,`jdbc:oracle:thin:@(DESCRIPTION=...
JDBC允许开发人员执行SQL语句、处理结果集、事务管理以及数据库连接池等操作。 ### JDBC基本概念 1. **Driver Manager**: 是JDBC的核心组件,负责管理数据库驱动,负责加载和注册数据库驱动。 2. **Driver**: 提供...
6. 使用Druid的数据源配置,设定连接池的基本参数,如最大连接数、最小空闲连接数等。 7. 编写业务代码,通过SpringBoot的@Autowired注解注入数据库操作对象,调用MyBatis的Mapper方法进行数据操作,Sharding-JDBC会...
2. C3P0:这是一个开源的JDBC连接池,提供了比DBCP更高级的功能,如连接测试、空闲连接检测、自动扩展等。C3P0通过组合多个数据源来实现连接池,可以更好地控制并发和资源管理。 这些jar包的收集意味着开发者可以...