SpringBoot数据源——为什么平时默认线程池是Hikari

这篇具有很好参考价值的文章主要介绍了SpringBoot数据源——为什么平时默认线程池是Hikari。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文主要对DataSourceAutoConfiguration类进行讲解,然后对这个类的注解做一个解释,所以直接打开这个类,开始看……

ps:我用的版本是2.3.0.RELEASE

目录

DataSourceAutoConfiguration类注解

@Configuration(proxyBeanMethods = false)

@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })

@ConditionalOnMissingBean(type = "io.r2dbc.spi.ConnectionFactory")

@EnableConfigurationProperties(DataSourceProperties.class)

@Import({ DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class })

DataSourcePoolMetadataProvidersConfiguration

DataSourceInitializationConfiguration

内部类EmbeddedDatabaseConfiguration注解

@Conditional(EmbeddedDatabaseCondition.class)

内部类PooledDataSourceConfiguration注解

@Conditional(PooledDataSourceCondition.class)

总结


DataSourceAutoConfiguration类注解

@Configuration(proxyBeanMethods = false)

@Configuration这个注解比较常用,就不说了,主要是proxyBeanMethods = false。表示禁用代理模式,此时 Spring 不会为 @Configuration 注解所标注的类生成代理对象,而是直接调用其中的方法。

在实际开发中,如果一个类中的方法都是独立的、无状态的 Bean 配置方法(即通过 @Bean 注解定义的方法),则可以将 @Configuration(proxyBeanMethods = false) 应用于该类以提高性能。因为禁用代理模式可以避免 Spring 为每个 Bean 配置方法创建代理对象,从而减少 Spring 容器初始化和运行时的开销。但需要注意的是,禁用代理模式可能会导致部分功能失效,比如声明的 Bean 不能被切面增强等。

@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })

表示只有当 DataSourceEmbeddedDatabaseType 这两个类在当前应用的类路径上存在时,被该注解所标注的 Bean 或配置类才会被创建和注册。其中 DataSource 是 Java 标准库中的数据库连接池接口,而 EmbeddedDatabaseType 则是 Spring Boot 提供的用于支持嵌入式数据库的枚举类。

@ConditionalOnMissingBean(type = "io.r2dbc.spi.ConnectionFactory")

表示只有当容器中不存在 io.r2dbc.spi.ConnectionFactory 类型的 Bean 时,被该注解所标注的 Bean 或配置类才会被创建和注册。其中 io.r2dbc.spi.ConnectionFactory 是 R2DBC 数据库连接抽象接口。

@EnableConfigurationProperties(DataSourceProperties.class)

表示开启 DataSourceProperties 配置属性类的自动注入。Spring Boot 会自动根据字段或 setter 方法的名称来匹配 DataSourceProperties 中的属性,在容器启动时将配置文件中的属性值自动注入到 DataSourceProperties 类对象中。

通常情况下,在使用 Spring Boot 开发应用时,我们会使用 @ConfigurationProperties 注解来定义应用需要的配置项。通过定义一个与配置文件对应的配置属性类,并使用 @EnableConfigurationProperties 进行开启自动注入,我们可以将配置文件中的属性值自动注入到配置属性类中,然后在应用中使用该配置属性类对象,从而方便地获取和管理应用的配置信息。

@Import({ DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class })

@Import 注解中,传入一个包含多个配置类的数组,表示将这些配置类中定义的 Bean 或组件导入到当前的配置类中,以便在容器启动时一起注册到 Spring 容器中。

具体来说,在使用 Spring Boot 开发应用时,我们可能需要使用到其他模块或第三方库中的 Bean 或组件,此时可以通过 @Import 注解将相关的配置类或组件导入到当前应用的配置类中。

DataSourcePoolMetadataProvidersConfiguration

为支持的数据源提供一个 DataSourcePoolMetadataProvider实例,用来提供数据源连接池元数据信息的,包括连接池名称、最大连接数、空闲连接数等。

DataSourceInitializationConfiguration

初始化数据源的,包括执行 SQL 脚本、设置数据源编码等。

内部类EmbeddedDatabaseConfiguration注解

@Configuration(proxyBeanMethods = false)不再赘述。

@Conditional(EmbeddedDatabaseCondition.class)

如果符合EmbeddedDatabaseCondition的条件,才能继续往下读取注解

判断条件是getMatchOutcome的代码

可以看出如果spring.datasource.url设置则不符合条件

如果满足pooledCondition则不符合条件(直接看PooledDataSourceCondition,下边再讲)

如果没有EmbeddedDatabase则不符合条件,其余符合

所以以上情况下嵌入式数据源是不会使用到的

下边注解不再赘述

内部类PooledDataSourceConfiguration注解

@Configuration(proxyBeanMethods = false)不再赘述

@Conditional(PooledDataSourceCondition.class)

这个条件类继承了AnyNestedCondition这个类表示任一条件符合就生效

指定spring.datasource.type则生效

"com.zaxxer.hikari.HikariDataSource",
"org.apache.tomcat.jdbc.pool.DataSource", 
"org.apache.commons.dbcp2.BasicDataSource"

以上三个数据源有一个可用则生效,内置的有HikariDataSource所以生效@ConditionalOnMissingBean({ DataSource.class, XADataSource.class })不再赘述

最后一个Import注解第一个导入的就是DataSourceConfiguration.Hikari,所以生效的就是Hikari它,并且这些类的注解上都有一个@ConditionalOnMissingBean(DataSource.class)。

总结

数据源开胃菜,复习注解文章来源地址https://www.toymoban.com/news/detail-459850.html

到了这里,关于SpringBoot数据源——为什么平时默认线程池是Hikari的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot + (mysql/pgsql) + jpa 多数据源(不同类数据源)

     配置文件: datasourceconfig: 数据源一: 数据源二:

    2024年02月14日
    浏览(58)
  • Springboot多路数据源

    1、多路数据源配置 (1)SpringBoot+MyBatis-Plus+Oracle实现多数据源配置 https://blog.csdn.net/weixin_44812604/article/details/127386828 (2)SpringBoot+Mybatis搭建Oracle多数据源配置简述 https://blog.csdn.net/HJW_233/article/details/129103370 (3)SpringBoot+Mybatis+Oracle 增删改查(简单的案例,超详细) https://blo

    2024年02月12日
    浏览(46)
  • springboot配置数据源

    Spring Framework 为 SQL 数据库提供了广泛的支持。从直接使用 JdbcTemplate 进行 JDBC 访问到完全的对象关系映射(object relational mapping)技术,比如 Hibernate。Spring Data 提供了更多级别的功能,直接从接口创建的 Repository 实现,并使用了约定从方法名生成查询。 1、JDBC 1、创建项目,导

    2024年02月08日
    浏览(47)
  • SpringBoot动态切换数据源

      Spring提供一个DataSource实现类用于动态切换数据源—— AbstractRoutingDataSource pom.xml 大概的项目结构 注意:这两个事务管理器,并不能处理分布式事务 链接:https://pan.baidu.com/s/1ymxeKYkI-cx7b5nTQX0KWQ  提取码:6bii  --来自百度网盘超级会员V4的分享                

    2024年02月06日
    浏览(51)
  • springboot,多数据源切换

    需求介绍:         要求做一个平台,有其他第三方系统接入;每个系统有自己的数据源配置,通过调用平台接口,实现将数据保存到第三方自己的数据库中; 实现过程:         1.在平台项目运行时,通过接口获取每个第三方系统的数据源;以key-value的形式保存到全局

    2024年02月16日
    浏览(39)
  • springboot多数据源使用

    在工作上有一个新项目,现在需要获取旧项目的用户信息、积分的操作等等,所以需要调用另外一个项目的数据库,所以我们可以配置多数据源。 yml版本  properties版本 在impl类上加注解@DS(\\\"master\\\"),master为配置的master名字 调用方法  获取结果  在impl类上加注解@DS(\\\"slave_1\\\"),

    2024年02月11日
    浏览(38)
  • Springboot 多数据源 dynamic-datasource动态添加移除数据源

    上一篇文章我们讲了如何通过多数据源组件,在Spring boot Druid 连接池项目中配置多数据源,并且通过@DS注解的方式切换数据源,《Spring Boot 配置多数据源【最简单的方式】》。但是在多租户的业务场景中,我们通常需要手动的切换数据源,那么本文将解答你的额疑惑。 dynam

    2024年02月13日
    浏览(56)
  • ruoyi(若依)配置多数据源(mysql+postgresql),rouyi(Springboot)多数据源设置

    (1)修改DatasourceType (2)修改DruidConfig,这里有很多细节要注意,就是大小写的问题 (3)使用选择数据源,会自动切换数据源

    2024年02月16日
    浏览(64)
  • springboot之多数据源配置

    实际开发中,进场可能遇到在一个引用中可能需要访问多个数据库的情况,以下是两种典型场景: 数据分布在不同的数据库汇总,数据库拆了,应用没拆。一个公司多个子项目,各用各的数据库,涉及数据共享。。。。 为了解决数据库的读性能瓶颈(读比写性能更高,写锁

    2024年02月07日
    浏览(41)
  • SpringBoot整合MybatisPlus多数据源

    相信在很多使用MybatisPlus框架的小伙伴都会遇到多数据源的配置问题,并且官网也给出了推荐使用多数据源 (dynamic-datasource-spring-boot-starter) 组件来实现。由于最近项目也在使用这个组件来实现多数据源切换,因此想了解一下该组件是如何运行的,经过自己的调试,简单记录一

    2024年02月13日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包