赞
踩
Java和MySQL的连接池是为了提高Java应用程序访问MySQL数据库的性能而设计的,它可以在应用程序和MySQL数据库之间建立一组预先初始化的连接,使应用程序可以快速地从池中获取连接并执行SQL查询。在本篇博客中,我们将介绍如何使用Java中的连接池来连接MySQL数据库。
连接池和Connection对象有关。
Java中连接池的实现主要分为两种:第一种是使用Java平台提供的JDBC API来实现连接池,第二种是使用第三方库来实现连接池。常见连接池:1.C3P0 2.DBCP 3.Druid (德鲁伊)
实现连接池的步骤如下:
Alibaba的Druid是一款开源的高性能JDBC连接池和监控工具,它不仅仅具有连接池的基本功能,还提供了强大的监控、统计和SQL调优功能,使得开发人员可以更好地管理和优化数据库连接和SQL查询。
Druid连接池的特点包括:
下面是一个使用Druid连接池的示例:
// 创建Druid连接池对象 DruidDataSource dataSource = new DruidDataSource(); // 设置连接池参数 dataSource.setUrl("jdbc:mysql://localhost:3306/mydb"); dataSource.setUsername("root"); dataSource.setPassword("password"); dataSource.setInitialSize(5); dataSource.setMaxActive(20); dataSource.setMinIdle(5); dataSource.setMaxWait(60000); // 获取连接 Connection conn = dataSource.getConnection(); // 使用连接进行数据库操作 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM table"); // 关闭连接 rs.close(); stmt.close(); conn.close();
或者把参数写入properties文件,每次修改只需要修改properties文件里的参数
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/java2304?useSSL=false
username=root
password=123456
initialSize=5
maxActive=10
maxWait=2000
//1.读取druid.properties Properties properties = new Properties(); //2.以流的形式进行操作 properties.load(new FileInputStream("src/druid.properties")); //3.创建Druid的核心类 //druid数据源的工厂 //dataSource 数据源中干了获取配置文件的的数据并赋值给数据源 DataSource dataSource = DruidDataSourceFactory.createDataSource(properties); //4.获取连接数据库的对象 Connection connection = dataSource.getConnection(); //5.使用连接进行数据库操作 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM table"); // 关闭连接 rs.close(); stmt.close(); conn.close();
DruidDataSource是Druid连接池的核心类,它提供了一系列方法和参数用于配置和管理连接池。下面对其中比较常用的方法和参数进行详解。
setUrl(String url):设置数据库URL,格式为jdbc:xxx://host:端口号/database?connection_properties。setUsername(String username):设置数据库用户名。setPassword(String password):设置数据库密码。setInitialSize(int initialSize):设置连接池初始大小。setMaxActive(int maxActive):设置连接池最大连接数。setMinIdle(int minIdle):设置连接池最小空闲连接数。setMaxWait(long maxWait):设置获取连接的最大等待时间,单位毫秒。setTestWhileIdle(boolean testWhileIdle):设置连接空闲时是否进行检测。setValidationQuery(String validationQuery):设置用于检测连接是否有效的SQL语句。setTestOnBorrow(boolean testOnBorrow):设置获取连接时是否进行检测。setTestOnReturn(boolean testOnReturn):设置归还连接时是否进行检测。setPoolPreparedStatements(boolean poolPreparedStatements):是否缓存PreparedStatement。setMaxOpenPreparedStatements(int maxOpenPreparedStatements):缓存的PreparedStatement的最大数量。setFilters(String filters):设置拦截器,用于防止SQL注入等问题。getConnection():获取连接。
url:数据库URL,格式为jdbc:xxx://host:port/database?connection_properties。username:数据库用户名。password:数据库密码。initialSize:连接池初始大小,默认为0。maxActive:连接池最大连接数,默认为8。minIdle:连接池最小空闲连接数,默认为0。maxWait:获取连接的最大等待时间,单位毫秒,默认为-1,表示永不超时。testWhileIdle:连接空闲时是否进行检测,默认为false。validationQuery:用于检测连接是否有效的SQL语句,默认为SELECT 1。testOnBorrow:获取连接时是否进行检测,默认为false。testOnReturn:归还连接时是否进行检测,默认为false。poolPreparedStatements:是否缓存PreparedStatement,默认为false。maxOpenPreparedStatements:缓存的PreparedStatement的最大数量,默认为-1,表示不限制。filters:拦截器,用于防止SQL注入等问题,默认为空。
综上所述,Druid连接池的方法和参数丰富,可以根据实际需求进行配置和管理,以提高数据库连接和查询的性能和可靠性。
setMaxWait(long maxWait)是Druid连接池中一个比较重要的方法,它用于设置获取连接的最大等待时间,单位为毫秒。当连接池中的连接已经全部被占用,而此时需要获取连接时,如果等待时间超过了设置的最大等待时间,将会抛出SQLException异常。
在实际应用中,如果没有设置最大等待时间,那么连接池会一直等待直到有可用的连接,这样可能会导致系统的响应时间过长,影响用户的体验。因此,设置最大等待时间是一个比较好的实践,可以在一定程度上控制系统的响应时间。
需要注意的是,设置的最大等待时间并不是连接的最长生命周期,连接池中的连接可能会被定时清理,这取决于连接池的配置。另外,在高并发的情况下,如果连接池中的连接过少,而最大等待时间过长,可能会导致请求堆积、系统负载过高等问题。因此,在实际使用中,需要根据应用的实际情况进行设置。
filters是Druid连接池中的一个参数,用于设置连接池的拦截器。拦截器是Druid连接池提供的一种可插拔的机制,用于对SQL进行统一的处理,比如防止SQL注入、SQL性能监控等。Druid连接池内置了一些常用的拦截器,可以直接使用,也可以根据自己的需求进行扩展。
常用的拦截器包括:
WallFilter:用于防止SQL注入。StatFilter:用于统计SQL的执行时间、执行次数等信息。Log4jFilter:用于将SQL的执行结果输出到Log4j日志中。使用拦截器可以提高数据库连接和查询的安全性、可靠性和性能,避免一些常见的问题和漏洞。设置拦截器可以使用以下代码:
dataSource.setFilters("stat,wall,log4j");
上述代码表示启用了StatFilter、WallFilter和Log4jFilter三个拦截器。多个拦截器之间用逗号分隔。
需要注意的是,拦截器的使用可能会影响到系统的性能,尤其是在高并发的情况下,因此需要根据应用的实际情况进行选择和配置。另外,Druid连接池中的拦截器还支持自定义拦截器,可以根据需要进行扩展。
<connection_properties>是连接数据库时的一些附加参数,一般包括一些数据库连接配置信息,比如用户名、密码、字符集、超时时间等。JDBC规范规定了一些标准的连接参数,不同的数据库也会支持一些特定的连接参数。
常用的JDBC连接参数包括:
user:连接数据库的用户名。password:连接数据库的密码。characterEncoding:设置数据库字符集,比如UTF-8、GBK等。useSSL:是否启用SSL加密连接,默认为false。autoReconnect:是否自动重连数据库,默认为false。connectTimeout:连接数据库的超时时间,单位为毫秒。在JDBCUrl中,连接参数以问号(?)开头,多个参数之间以&符号分隔。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。