连接池

javaSE JDBC, 连接池DBCP, 获取DataSource的工具类

匿名 (未验证) 提交于 2019-12-02 21:53:52
MySql驱动(jar包)下载: https://pan.baidu.com/s/19BYnGbO3l5MOOic5K4Ooaw 第三方插件(commons-dbutils)下载: https://pan.baidu.com/s/17cyAXHZLgiayx5Y_VHvawQ 连接池DBCP下载(jar包): https://pan.baidu.com/s/1U3dGaAb26yUMTr4NI3HF3g Demo.java(工具测试类): package cn.xxx.demo; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayListHandler; import cn.xxx.jdbcutils.JDBCUtils; // 自定义的工具类,用于获取DataSource实现类对象(连接池) public class Demo{ public static void main(String[] args) { //insert(); select(); } //通过DataSource对象实例化QueryRunner对象,其update(

廖雪峰Java15JDBC编程-3JDBC接口-5JDBC连接池

匿名 (未验证) 提交于 2019-12-02 21:52:03
线程池可以复用一个线程,这样大量的小任务通过线程池的线程执行,就可以避免反复创建线程带来的开销。 同样JDBC可以复用一个JDBC连接 JDBC的连接池可以维护若干个JDBC连接,在执行数据库任务的时候,可以从连接池中直接获取连接,而不是反复创建和关闭JDBC连接 javax.sql.DataSource JDK只提供了连接池的定义,所以我们还要实现JDBC的连接池。常用的开源实现: * HikariCP * C3P0 * BoneCP * Druid 导入依赖 <!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP --> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.3.1</version> </dependency> 演示代码 HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/test"); config.setUsername("root"); config.setPassword("password"); config

java----c3p0连接池

匿名 (未验证) 提交于 2019-12-02 21:45:52
C3p0连接池。目前使用它的开源项目有Spring,Hibernate等。使用第三方工具需要 * 导入jar包,c3p0使用时还需要添加配置文件c3p0-config.xml * 配置文件名称:c3po-config.xml(固定) * 配置文件位置:src(类路径) * 配置文件内容:命名配置 * c3p0的核心工具类:ComboPooledDataSource.如果要使用连接池,必须创建该类的实例对象。 c3p0-config.xml文件相关说明 import java.sql.Connection; import javax.management.RuntimeErrorException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class Mtest8Demo { /* * C3p0连接池。目前使用它的开源项目有Spring,Hibernate等。使用第三方工具需要 * 导入jar包,c3p0使用时还需要添加配置文件c3p0-config.xml * 配置文件名称:c3po-config.xml(固定) * 配置文件位置:src(类路径) * 配置文件内容:命名配置 * c3p0的核心工具类:ComboPooledDataSource

ajax请求服务器时在控制台500 Internal Server Error,java.sql.SQLRecoverableException: IO Error: Connection reset

匿名 (未验证) 提交于 2019-12-02 21:40:30
当ajax访问后台服务器端时报500 Internal Server Error,直接访问该controller方法时报java.sql.SQLRecoverableException: IO Error: Connection reset 原因: 当数据库连接池中的连接被创建而长时间不使用的情况下,该连接会自动回收并失效,但客户端并不知道,在进行数据库操作时仍然使用的是无效的数据库连接,这样,就导致客户端程序报“ java.sql.SQLException: Io 异常: Connection reset” 或“java.sql.SQLException 关闭的连接”异常。 解决办法: 在配置数据源后面加上 <property name="validationQuery" value="select * from dual"/> 配置后,客户端在使用一个无效的连接时会先对该连接进行测试,如果发现该连接已经无效,则重新从连接池获取有效数据库连接来使用。 解决思路是Connection Reset的原因有可能有以下几种原因: 1.配置的数据连接池的连接数不够用; 2.数据库的连接池中的连接,长时间不用,数据库主动断开连接,而客户端不知道,在用的时候仍然拿到的是无效的连接; 分别对应以上的两种猜想的原因,进行处理: 1.配置连接池的最大、最小、空闲连接数等; 2

C3P0连接池的使用

匿名 (未验证) 提交于 2019-12-02 21:38:03
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展,设计非常简单易用 添加maven依赖 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.44</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5</version> </dependency> 编写C3P0工具类 public class C3P0Utils { private static ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql"); public static DataSource getDataSource() { return dataSource; } public static Connection getConnection() { try { return dataSource.getConnection(); } catch (SQLException

Java与redis交互、Jedis连接池JedisPool

匿名 (未验证) 提交于 2019-12-02 21:35:04
Java与redis交互比较常用的是Jedis。 先导入jar包: commons-pool2-2.3.jar jedis-2.7.0.jar 基本使用: public class RedisTest1 { public static void main(String[] args) { Jedis jedis = new Jedis("localhost",6379); jedis.set("username","chichung"); jedis.close(); } } JedisPool连接池 基本使用如下: public class RedisTest2 { public static void main(String[] args) { // 比较特殊的是,redis连接池的配置首先要创建一个连接池配置对象 JedisPoolConfig config = new JedisPoolConfig(); // 当然这里还有设置属性的代码 // 创建Jedis连接池对象 JedisPool jedisPool = new JedisPool(config,"localhost",6379); // 获取连接 Jedis jedis = jedisPool.getResource(); // 使用 // 关闭,归还连接到连接池 jedis.close(); } }

《java数据源―连接池》

匿名 (未验证) 提交于 2019-12-02 21:35:04
《java数据源―连接池》 1.数据源的分类:直接数据源、连接池数据源。 2.连接池、数据源、JNDI a.数据源:Java中的数据源就是连接到数据库的一条路径,数据源中并无真正的数据,它仅仅记录的是你连接到哪个数据库,以及如何连接。 b.连接池:简单的说就是保存所有的数据库连接的地方,在系统初始化时,将数据库连接对象存储到内存里,当用户需要访问数据库的时候,并不是建立一个新的连接,而是从连接池中 取出一个已经建立好的空闲连接对象。而连接池负责分配、管理、释放数据库连接对象。注意的是:连接池是由容器(比如tomcat)提供的, 同时容器也管理着连接池。 当使用java.sql中提供的api创 建数据库连接时候,需要耗费很大的资源,要进行用户名密码数据库连接验证等,即耗费资源也耗费时间。如果在程序中, 每次需要访问数据库时候,都进行数据库 连接,那么势必会造成性能低下;同时,如果用户失误忘记释放数据库连接,会导致资源的浪费等。 而数据库连接池就是解决该问题,通过管理连接池中的多个连接 对象(connection),实现connection重复利用。从而,大大提高了数据库连接方面的性能。 负责创建,管理,释放,分配数据库连接即(connection)。首先,负责创建相应数目的数据库连接对象(connection)对象,并存放到数据库连接池(connect pool)中。

Java爬虫入门(四)——线程池和连接池

十年热恋 提交于 2019-12-02 19:42:12
前言: 这个系列我分四个部分来分别接触四块知识,最后再串起来: Java爬虫入门(一)——项目介绍 Java爬虫入门(二)——HttpClient请求 Java爬虫入门(三)——正则表达式 Java爬虫入门(四)——线程池和连接池 Java爬虫入门(五)——缓冲流写入 GitHub地址: https: //github .com /jjc123/Java-Crawler/blob/master/README .md 简而言之,这一块内容可以直接Google ,网上资料很多,我就不在这里多累赘了 线程池: 线程池,这一篇或许就够了 Java 四种线程池的用法分析 总结: 这次项目中线程池的目的是: 1. A线程池多并发爬取小说网站的小说链接, 加入到另一个线程池(实现分页爬取整个网站) 2. 多并发爬取获取到的小说 简单来说: 页面层面多并发获取小说, 小说层面下载小说是多并发, 小说内容的章节下载是单线程。 看图理解下,不知道我的表述是否完整。 注意:这里线程要继承 Runnable接口。 因为线程池加入需要的是 Runnable接口而不是Thread 默认当你加入线程池的时候 就不需要启动了,不像Thread需要Thread.start()自己启动。 还有线程的join()可以了解下: 将该线程加入到所在线程,只有该线程执行完毕后 所在线程才可以继续执行。

JAVA的WEB项目乱码,起因于tomcat 7 jdbc pool的使用

泄露秘密 提交于 2019-12-02 19:41:28
以前都是使用自己写的数据库连接池,一直也都没出现乱码问题。 因为听说tomcat7自带的连接池效率不错,就想用一下,结果便产生了乱码。 乱码的产生途径无非就是那么几个,mysql建书库和建表的时候指定编码,eclipse工程编码统一,web页面的编码,以及连接数据库的时候指定编码。 就上面那几个,排除一下就能找出原因。因为这次只是替换了连接池,却出现了乱码,我便怀疑到了连接池的问题上。 以前连接数据库的配置,可以这么写 conn.url=jdbc:mysql://localhost:3306/xxx?useUnicode=true& amp; characterEncoding=UTF-8 但是,tomcat7的JDBC POOL不是这样的,格式如下: conn.url=jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=UTF-8 就是把那个amp;去掉就成。 话说官网的文档真心坑爹,敷衍了事,居然连这个都没交代,还是在社区里面找到的答案。 来源: oschina 链接: https://my.oschina.net/u/177243/blog/204446

mongodb的连接池管理

孤街醉人 提交于 2019-12-02 18:57:54
https://blog.csdn.net/lin_tuer/article/details/78480203 用单例模式建立mongoDB的连接,需要每次操作完关闭连接吗? 关于建立单例模式的MongoDB连接,参考这里MongoClient连接池用法 建立了之后,每次操作调用同一个实例,MongoClient又是线程安全的,貌似就没有什么问题了。但是 突然想到,这些连接获取后,操作完不主动释放,会不会一直被占有? – 于是开始找各种资料,这篇文章给出了很形象的说明,MongoDB的连接池和管理 – 原来,答案是没有必要! 在关系型数据库中,我们总是需要关闭使用的数据库连接,不然大量的创建连接会导致资源的浪费甚至于数据库宕机。 通常我们习惯于new 一个connection并且通常在finally语句中调用connection的close()方法将其关闭。正巧,mongoDB中当我们new一个Mongo的时候,会发现它也有一个close()方法。所以会出现这样的情况:我们在需要DB操作的方法中new一个mongo实例,然后调用mongo.getDB()方法拿到对应的连接,操作完数据之后再调用mongo.close()方法来关闭连接。 看起来貌似是没有什么问题,但是如果你再研究一下mongo的API,你会发现这样耳朵操作就相当于园丁在浇花的时候去打了一桶水,然后舀了一勺水浇一朵花