javascript
实例源码_SpringBoot数据库源码解析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, NamedParameterJdbcTemplateConfiguration.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@PrimaryJdbc Template jdbcTemplate(DataSource dataSource, JdbcProperties propertie//根據數據源創建 Jdbc TemplateJdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);JdbcProperties . Template template = properties . getTemplate();//設置配置文件中的配置項到 dbc TemplatejdbcTemplate . setFetchSize(template . getFetchSize());jdbcTemplate . setMaxRows (template . getMaxRows());if (template . getQueryTimeout() != null) {jdbcTemplate. setQueryTimeout((int) template. getQueryTimeout(). getSeconds());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@PrimaryNamedParameterJdbcTemplate namedParameterJdbcTemplate(JdbcTemplate jdbcTemplate)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数据库源码解析Template实例化操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python加go_[Python异步博
- 下一篇: gradle idea java ssm