200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > JAVA常用数据库连接池

JAVA常用数据库连接池

时间:2021-05-30 09:34:16

相关推荐

JAVA常用数据库连接池

1.连接池

池化思想是在计算机软件研发中常用的一种思想;该思想为建立一组序列,用于存放各种数据结构,从而对各种数据结构进行管理。池化的优点为:让数据结构有序化和处于控制,从而方便管理。池化本质是一种数学思想,常见的数学池如:整数池、小数池、有理数池、负数池。而在计算机工程中常见的池为:连接池、内存池、线程池。

连接池是一种思想和技术:把整个数据库连接放入池内;当访问数据库时,如果连接存在,则直接采用原来的数据库连接;同时,新连接会存在连接池内,方便服用。

连接池带来了数据库访问的极大的效率提升:因为访问数据库一般用TCP连接,TCP建立连接会用三次握手;而连接池会减少很多不必要的重复连接,会极大提升数据库的访问效率。

池化在很大程度上对我们认识世界和工程管理带来了极大的便利。但池化也会引入麻烦,当数据或数据结构突破池的范围时,会造成整个程序的崩溃,并带来极大的危害。人类认识史上的池的崩溃例子为:人们刚开始只认识10个指头所能标记的数,当数字超过10时,很多小孩直接不再会算数。数学史上的一个池的崩溃为:毕达哥拉斯学派弟子希伯斯发现了无理数根号2,直接造成了数学王国的一段长期的危机。而在计算机工程上,内存池、连接池和线程池的崩溃,则可能造成巨大的损失。

2.JAVA常用连接池比较

JAVA常用的连接池有dbcp、c3p0、tomcat-jdbc、druid和HiKariCP。其中,dbcp、c3p0、tomcat-jdbc是第一代连接池,druid和HiKariCP是第二代连接池。不同连接池对比如下:

目前,大部分软件工程已经开始用Druid和HiKariCP。Druid号称最好的JAVA连接池,但这种“”体现在功能强大,如进行监控,比较性能的话,还是HiKariCP。有兴趣的可以参考这篇博客:《数据库连接池选型 Druid vs HikariCP》(/post/6885974851949953031)

3.SpringBoot的默认连接池HiKariCP

目前SpringBoot中默认的连接池为HiKariCP,从SpringBoot2.0开始,不用配置即可添加HiKari CP。

可以在默认配置文件添加配置文件,配置样例如下:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test1?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNullspring.datasource.username=rootspring.datasource.password=hongda$123456spring.datasource.driverClassName=com.mysql.jdbc.Driverspring.datasource.max-idle=10spring.datasource.max-active=15spring.datasource.max-lifetime=86430000spring.datasource.log-abandoned=truespring.datasource.remove-abandoned=truespring.datasource.remove-abandoned-timeout=60spring.datasource.initialize=falsespring.datasource.sqlScriptEncoding=UTF-8

4.设置样例

可以在SpringBoot程序中动态设置HiKariCP,样例如下:

public static SessionFactory getSessionFactory() {SessionFactory sessionFactory = null;try { Configuration configuration = new Configuration();Properties settings = new Properties();settings.put(Environment.DIALECT, "org.hibernate.dialect.MySQL5Dialect");settings.put(Environment.SHOW_SQL, "true");settings.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, "thread"); settings.put(Environment.DRIVER, "com.mysql.cj.jdbc.Driver");settings.put(Environment.USER, "***");settings.put(Environment.PASS, "***");settings.put(Environment.URL, "jdbc:mysql://地址:端口号/数据库名称?serverTimezone=GMT%2B8");// HikariCP settings // Maximum waiting time for a connection from the poolsettings.put("hibernate.hikari.connectionTimeout", "20000");// Minimum number of ideal connections in the poolsettings.put("hibernate.hikari.minimumIdle", "10");// Maximum number of actual connection in the poolsettings.put("hibernate.hikari.maximumPoolSize", "20");// Maximum time that a connection is allowed to sit ideal in the poolsettings.put("hibernate.hikari.idleTimeout", "300000");configuration.setProperties(settings);configuration.addAnnotatedClass(GsmTaskSpecs.class); //可以加更多的配置ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();sessionFactory = configuration.buildSessionFactory(serviceRegistry);} catch (Throwable ex) {// Make sure you log the exception, as it might be swallowedsessionFactory = null;ex.printStackTrace();}return sessionFactory;}

5.参考文献

[1]主流数据库连接池性能比较 hikari druid c3p0 dbcp jdbc,/barrywxx/p/8506571.html

[2]主流Java数据库连接池比较及前瞻,/p/b9b98ac3e010

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。