加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱资讯网 (https://www.52junxun.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

SpringBoot数据库源码解析Template实例化操作

发布时间:2022-11-18 10:44:38 所属栏目:MySql教程 来源:
导读:  Jdbc TemplateAutoConfiguration

  在实践过程中,除了数据源的配置外,我们还会经常用到 Jdbc Template。Jdbc Template是 Spring 对数据库的操作在 jdbc 的封装。本节我们简单看一下 Jdbc Template 实例化
  Jdbc TemplateAutoConfiguration
 
  在实践过程中,除了数据源的配置外,我们还会经常用到 Jdbc Template。Jdbc Template是 Spring 对数据库的操作在 jdbc 的封装。本节我们简单看一下 Jdbc Template 实例化操作,不做过多拓展。
 
  JdbcTemplate 的自动配置是通过 Jdbc TemplateAutoConfiguration 来完成的,与上面讲到的 DataSourceAutoConfiguration 的自动配置 在 spring.factories 中注册位置一样。 源代码如下。
 
  @Configuration(proxyBeanMethods = false)
  @ConditionalOnClass({ DataSource. class, JdbcTemplate.class })
  @ConditionalOnSingleCandidate(DataSource.class)
  @AutoConfigureAfter (DataSourceAutoConfiguration. class)
  @EnableConfigurationProperties (JdbcProperties.class)
  @Import({ JdbcTemplateConfiguration. class, NamedParameterJdbcTemplateConfig
  uration.
  class })
  public class JdbcTemplateAutoConfiguration {
  }
  }
  JdbcTemplateAutoConfiguration 的具体实现为空,注解部分通过@ConditionalOn-Class指 定 必 须 存 在 DataSource 和 JdbcTemplate 类 才 会 进 行 实 例 化 ;
 
  @ConditionalOnSingle-Candidate 指定只存在 -一个候选 DataSource 的 Bean 时才会实例化:@AutoConfigureAfter 指定在初始化 DataSourceAutoConfiguration 之后才会进行实例化;
 
  @EnableConfigurationProperties 指定了配置类;
 
  @lmport导入了JdbcTemplateConfiguration和NamedParameterJdbcTemplateConfigurati-on 两 个 配 置 类 , 其 中 JdbcTemplateConfiguration 便是用来实例化 Jdbc Template 的。
 
  @Configuration(proxyBeanMethods = false)
  @ConditionalOnMi ssingBean( JdbcOperations. class)
  class JdbcTemplateConfiguration {
  @Bean@Primary
  Jdbc Template jdbcTemplate(DataSource dataSource, JdbcProperties propertie
  //根据数据源创建 Jdbc Template
  JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
  JdbcProperties . Template template = properties . getTemplate();
  //设置配置文件中的配置项到 dbc Template
  jdbcTemplate . setFetchSize(template . getFetchSize());
  jdbcTemplate . setMaxRows (template . getMaxRows());
  if (template . getQueryTimeout() != null) {
  jdbcTemplate. setQueryTimeout((int) template. getQueryTimeout(). getSeco
  nds());
  return jdbcTemplate;
  }
  }
  JdbcTemplate 的实例化操作很简单,根据数据源创建-一个 JdbcTemplate 对象,并设置JdbcProperties 中对应的配置,分别设置了获取数据大小、最大行数、查询超时时间等内容。
 
  JdbcTemplate 内部提供了我们操作数据库常见方法,比如 query、queryForObject、update、execute 等, 在此就不展开了。
 
  Jdbc TemplateAutoConfiguration 导入的 NamedParameterJdbcTemplateConfiguration 主要用来初始化 NamedParameterJdbcTemplate。NamedParameterJdbcTemplate 相当于Jdbc- Template 的包装类,提供了基于占位符的 SQL 的功能。
 
  @Configuration(proxyBeanMethods = false)Q
  @ConditionalOnsingleCandidate(JdbcTemplate . class)
  @ConditionalOnMiss ingBean(NamedParameterJdbcOperations .class)
  class NamedParameterIdbcTemplateConfiguration {
  @Bean
  @Primary
  NamedParameterJdbcTemplate namedParameterJdbcTemplate(JdbcTemplate jdbcTe
  mplate)
  return new NamedParameterIdbcTemplate(jdbcTemplate);
  }
  }
  NamedParameterJdbcTemplate 的实例化操作非常简单,满足自动配置条件时,以JdbcTemplate 为 参数 new-个 NamedParameterJdbc Template 即可。
 
  无论是 JdbcTemplate 还是 NamedParameterJdbcTemplate 的实例化,注解部分都添加了@Primary,用来表示当存在多个同类型的对象时,当前对象会被优先注入。关于 JdbcTemplate 的 JdbcTemplateAutoConfiguration 配置类我们就讲这么多。
 
  异常案例分析
 
  Spring Boot 中大多数自动配置引入之后不需要用户操作什么便可自动生效,但是数据源的配置算是一个例外。如果只是引入了 spring-boot-starter-jdbc 这个 starter,启动的时候是会抛出异常的。

  这是为什么呢?这是因为如果引入了该 starter,等于变相引入了 spring-jdbc,而数据源自动化配置类 DataSourceAutoConfiguration 生效的限定条件为 classpath 中司时存在javax.sql.DataSource和org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType 两个条件都满足,数据源自动配置生效,开始初始化相关信息。而此时,在 application.properties 中如果没有配置连接数据库的相关配置数据库实例,便会抛出异针对此异常,如果暂时不考虑使用数据库连接,可去掉 spring-boot-starter-jdbc 的依赖,或明确声明排除 DataSourceAutoConfiguration 的自动配可通过注解或配置文件两种形式中的一-种来达到目的。在启动类上添加注解排除方式。
 
  @EnableAutoConfigurat ion(exclude = DataSourceAutoConfiguration. class)通过配置文件排除方式。
  spring. autoconfigure . exclude=org . spr ingframework . boot . autoconfigure. jdbc.DataSourceAutoConfiguration
 
  小结
 
  本章重点介绍了 DataSourceAutoConfiguration 类和 Jdbc TemplateAutoConfiguration 类的 自 动 配 置 。 关 于 数 据 库 的 自 动 配 置 还 有 很 多 相 关 配 置 和 功 能 实 现 , 比 如JndiDataSource-AutoConfiguration 、 XADataSourceAutoConfiguration 、 DataSourceTransactionManagerAuto-Configuration 等, 感兴趣的朋友可以按照本章介绍的方法和思路进行源码的学习。

  本文给大家讲解的内容是SpringBoot数据库配置源码解析:Jdbc Template 实例化操作下篇文章给大家讲解的是SpringBoot消息源码解析;觉得文章不错的朋友可以转发此文关注小编;感谢大家的支持!
 

(编辑:我爱资讯网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!