千家信息网

如何使用springboot不自动初始化数据库连接池

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,小编给大家分享一下如何使用springboot不自动初始化数据库连接池,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!spr
千家信息网最后更新 2025年02月04日如何使用springboot不自动初始化数据库连接池

小编给大家分享一下如何使用springboot不自动初始化数据库连接池,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

springboot不自动初始化数据库连接池

简介

有时候我们想自己动态的初始化数据库连接池,但是springboot 的@SpringBootApplication注解会自动去初始化数据库连接池,不配置的话会启动失败,如下提示

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Dbcp2.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.commons.dbcp2.BasicDataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class
INFO - Unregistering JMX-exposed beans on shutdown

解决方案

办法就是排除自动初始化的类

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})public class Application implements CommandLineRunner {...}

加上这么一句

(exclude = {DataSourceAutoConfiguration.class})

就可以跳过数据库的自动初始化,自己为所欲为了~

记录下spring boot关于数据库连接池的一个小坑

环境:spring boot 1.5、JDK1.8

application.properties配置

# 驱动配置信息spring.datasource.url = jdbc:mysql://127.0.0.1:3306/mealsystem?useUnicode=true&characterEncoding=utf-8spring.datasource.username = rootspring.datasource.password = 123456spring.datasource.driverClassName = com.mysql.jdbc.Driver#连接池的配置信息spring.datasource.initialSize=5spring.datasource.minIdle=5spring.datasource.maxActive=20spring.datasource.maxWait=60000spring.datasource.timeBetweenEvictionRunsMillis=60000spring.datasource.minEvictableIdleTimeMillis=300000spring.datasource.validationQuery=SELECT 1 FROM DUALspring.datasource.testWhileIdle=truespring.datasource.testOnBorrow=falsespring.datasource.testOnReturn=falsespring.datasource.poolPreparedStatements=truespring.datasource.maxPoolPreparedStatementPerConnectionSize=20spring.datasource.filters=stat,wall,log4jspring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

先找到这个类

org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder

在下面的源码中打个断点

public DataSource build() {        Class type = this.getType();        DataSource result = (DataSource)BeanUtils.instantiate(type);        this.maybeGetDriverClassName();        this.bind(result);        return result;    }

启动项目

我们可以发现,在没有配置spring.datasource.type时,spring boot默认的连接池是tomcat-jdbc

也就是说我们在application.properties中配置的连接池参数是无效的。

好,那我们再配置下这个属性,使用阿里巴巴的druid

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

再启动下

再来看看1.5版本org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder的源码

private static final String[] DATA_SOURCE_TYPE_NAMES = new String[] {            "org.apache.tomcat.jdbc.pool.DataSource",            "com.zaxxer.hikari.HikariDataSource",            "org.apache.commons.dbcp.BasicDataSource", // deprecated            "org.apache.commons.dbcp2.BasicDataSource" };
  • spring boot 1.5的版本默认连接池为tomcat-jdbc

  • spring boot 2.0的版本默认连接池为HikariCP

以上是"如何使用springboot不自动初始化数据库连接池"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

数据 数据库 配置 版本 篇文章 信息 内容 源码 巴巴 为所欲为 不怎么 也就是 也就是说 办法 动态 参数 大部分 小坑 就是 属性 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器是什么设备 关于数据库的毕业设计 iphone 13 pro无法连接服务器 数据库访问错误是什么意思 机甲世纪为什么连不上服务器 获取oracle数据库系统时间 优雅的数据库面试 如何在服务器搭建ftp服务器 妇联网络安全讲座视频 江苏芯融网络技术研究院好吗 远程机房服务器管理工具 dell服务器怎么知道是否全新 带数据库的学生管理系统 数据库性别怎么打代码 绍兴网络技术培训班 数据库设计博客系统ppt 开封大学网络技术怎么样 给数据库添加个后门表 迅雷下载东西时会上传数据库 项目数据库软件 广播电视局网络安全的重要性 受托方研发项目软件开发费 上海单据外贸软件开发 apex一直连接服务器失败 软件开发企业做账流程图 网络技术路由表 汽车调表服务器 中国林业数据库2.0 软件开发过程改进分析实例 数据库简单的数据字典
0