JDBC连接池
- Java教程
- 2024-12-08
- 2948热度
- 12评论
我们在讲多线程的时候说过,创建线程是一个昂贵的操作,如果有大量的小任务需要执行,并且频繁地创建和销毁线程,实际上会消耗大量的系统资源,往往创建和消耗线程所耗费的时间比执行任务的时间还长,所以,为了提高效率,可以用线程池。
类似的,在执行JDBC的增删改查的操作时,如果每一次操作都来一次打开连接,操作,关闭连接,那么创建和销毁JDBC连接的开销就太大了。为了避免频繁地创建和销毁JDBC连接,我们可以通过连接池(Connection Pool)复用已经创建好的连接。
JDBC连接池有一个标准的接口javax.sql.DataSource
,注意这个类位于Java标准库中,但仅仅是接口。要使用JDBC连接池,我们必须选择一个JDBC连接池的实现。常用的JDBC连接池有:
- HikariCP
- C3P0
- BoneCP
- Druid
目前使用最广泛的是HikariCP。我们以HikariCP为例,要使用JDBC连接池,先添加HikariCP的依赖如下:
- com.zaxxer:HikariCP:2.7.1
紧接着,我们需要创建一个DataSource
实例,这个实例就是连接池:
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/test");
config.setUsername("root");
config.setPassword("password");
config.addDataSourceProperty("connectionTimeout", "1000"); // 连接超时:1秒
config.addDataSourceProperty("idleTimeout", "60000"); // 空闲超时:60秒
config.addDataSourceProperty("maximumPoolSize", "10"); // 最大连接数:10
DataSource ds = new HikariDataSource(config);
注意创建DataSource
也是一个非常昂贵的操作,所以通常DataSource
实例总是作为一个全局变量存储,并贯穿整个应用程序的生命周期。
有了连接池以后,我们如何使用它呢?和前面的代码类似,只是获取Connection
时,把DriverManage.getConnection()
改为ds.getConnection()
:
try (Connection conn = ds.getConnection()) { // 在此获取连接
...
} // 在此“关闭”连接
通过连接池获取连接时,并不需要指定JDBC的相关URL、用户名、口令等信息,因为这些信息已经存储在连接池内部了(创建HikariDataSource
时传入的HikariConfig
持有这些信息)。一开始,连接池内部并没有连接,所以,第一次调用ds.getConnection()
,会迫使连接池内部先创建一个Connection
,再返回给客户端使用。当我们调用conn.close()
方法时(在try(resource){...}
结束处),不是真正“关闭”连接,而是释放到连接池中,以便下次获取连接时能直接返回。
因此,连接池内部维护了若干个Connection
实例,如果调用ds.getConnection()
,就选择一个空闲连接,并标记它为“正在使用”然后返回,如果对Connection
调用close()
,那么就把连接再次标记为“空闲”从而等待下次调用。这样一来,我们就通过连接池维护了少量连接,但可以频繁地执行大量的SQL语句。
通常连接池提供了大量的参数可以配置,例如,维护的最小、最大活动连接数,指定一个连接在空闲一段时间后自动关闭等,需要根据应用程序的负载合理地配置这些参数。此外,大多数连接池都提供了详细的实时状态以便进行监控。
练习
使用JDBC连接池。
小结
数据库连接池是一种复用Connection
的组件,它可以避免反复创建新连接,提高JDBC代码的运行效率;
可以配置连接池的详细参数并监控连接池。
Для створення цілісного стильного образу варто звернути увагу на комплекти і штани https://ukrbeautystyle.com.ua/category/Komplekti-Shtani-. Вони допоможуть виглядати гармонійно і заощадять час на підбір одягу.
I’m gone to convey my little brother, that
he should also go to see this weblog on regular basis
to take updated from hottest reports.
Дуже подобається варіант, коли доступний зручний автобус до Польщі з багажем infobus.top, адже завжди беру із собою багато речей. Ніколи не виникало проблем із транспортуванням.
Нещодавно чув про хмарний комплаєнс komplaens-audit.top — цікаве рішення для компаній, які прагнуть цифрової трансформації. Раджу придивитися уважніше.
Тривалість служби гардеробу значно подовжується завдяки засобам для догляду за одягом. Вони зберігають колір, форму та якість улюблених речей.