javascript
实例源码_SpringBoot数据库源码解析Template实例化操作
Jdbc TemplateAutoConfiguration
在實踐過程中,除了數(shù)據(jù)源的配置外,我們還會經(jīng)常用到 Jdbc Template。Jdbc Template是 Spring 對數(shù)據(jù)庫的操作在 jdbc 的封裝。本節(jié)我們簡單看一下 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 的具體實現(xiàn)為空,注解部分通過@ConditionalOn-Class指 定 必 須 存 在 DataSource 和 JdbcTemplate 類 才 會 進 行 實 例 化 ;
@ConditionalOnSingle-Candidate 指定只存在 -一個候選 DataSource 的 Bean 時才會實例化:@AutoConfigureAfter 指定在初始化 DataSourceAutoConfiguration 之后才會進行實例化;
@EnableConfigurationProperties 指定了配置類;
@lmport導(dǎo)入了JdbcTemplateConfiguration和NamedParameterJdbcTemplateConfigurati-on 兩 個 配 置 類 , 其 中 JdbcTemplateConfiguration 便是用來實例化 Jdbc Template 的。
@Configuration(proxyBeanMethods = false)@ConditionalOnMi ssingBean( JdbcOperations. class)class JdbcTemplateConfiguration {@Bean@PrimaryJdbc Template jdbcTemplate(DataSource dataSource, JdbcProperties propertie//根據(jù)數(shù)據(jù)源創(chuàng)建 Jdbc TemplateJdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);JdbcProperties . Template template = properties . getTemplate();//設(shè)置配置文件中的配置項到 dbc TemplatejdbcTemplate . setFetchSize(template . getFetchSize());jdbcTemplate . setMaxRows (template . getMaxRows());if (template . getQueryTimeout() != null) {jdbcTemplate. setQueryTimeout((int) template. getQueryTimeout(). getSeconds());return jdbcTemplate;}}JdbcTemplate 的實例化操作很簡單,根據(jù)數(shù)據(jù)源創(chuàng)建-一個 JdbcTemplate 對象,并設(shè)置JdbcProperties 中對應(yīng)的配置,分別設(shè)置了獲取數(shù)據(jù)大小、最大行數(shù)、查詢超時時間等內(nèi)容。
JdbcTemplate 內(nèi)部提供了我們操作數(shù)據(jù)庫常見方法,比如 query、queryForObject、update、execute 等, 在此就不展開了。
Jdbc TemplateAutoConfiguration 導(dǎo)入的 NamedParameterJdbcTemplateConfiguration 主要用來初始化 NamedParameterJdbcTemplate。NamedParameterJdbcTemplate 相當(dāng)于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 為 參數(shù) new-個 NamedParameterJdbc Template 即可。
無論是 JdbcTemplate 還是 NamedParameterJdbcTemplate 的實例化,注解部分都添加了@Primary,用來表示當(dāng)存在多個同類型的對象時,當(dāng)前對象會被優(yōu)先注入。關(guān)于 JdbcTemplate 的 JdbcTemplateAutoConfiguration 配置類我們就講這么多。
異常案例分析
Spring Boot 中大多數(shù)自動配置引入之后不需要用戶操作什么便可自動生效,但是數(shù)據(jù)源的配置算是一個例外。如果只是引入了 spring-boot-starter-jdbc 這個 starter,啟動的時候是會拋出異常的。
這是為什么呢?這是因為如果引入了該 starter,等于變相引入了 spring-jdbc,而數(shù)據(jù)源自動化配置類 DataSourceAutoConfiguration 生效的限定條件為 classpath 中司時存在javax.sql.DataSource和org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType 兩個條件都滿足,數(shù)據(jù)源自動配置生效,開始初始化相關(guān)信息。而此時,在 application.properties 中如果沒有配置連接數(shù)據(jù)庫的相關(guān)配置,便會拋出異針對此異常,如果暫時不考慮使用數(shù)據(jù)庫連接,可去掉 spring-boot-starter-jdbc 的依賴,或明確聲明排除 DataSourceAutoConfiguration 的自動配可通過注解或配置文件兩種形式中的一-種來達到目的。在啟動類上添加注解排除方式。
@EnableAutoConfigurat ion(exclude = DataSourceAutoConfiguration. class)通過配置文件排除方式。
spring. autoconfigure . exclude=org . spr ingframework . boot . autoconfigure. jdbc.DataSourceAutoConfiguration
小結(jié)
本章重點介紹了 DataSourceAutoConfiguration 類和 Jdbc TemplateAutoConfiguration 類的 自 動 配 置 。 關(guān) 于 數(shù) 據(jù) 庫 的 自 動 配 置 還 有 很 多 相 關(guān) 配 置 和 功 能 實 現(xiàn) , 比 如JndiDataSource-AutoConfiguration 、 XADataSourceAutoConfiguration 、 DataSourceTransactionManagerAuto-Configuration 等, 感興趣的朋友可以按照本章介紹的方法和思路進行源碼的學(xué)習(xí)。
本文給大家講解的內(nèi)容是SpringBoot數(shù)據(jù)庫配置源碼解析:Jdbc Template 實例化操作
總結(jié)
以上是生活随笔為你收集整理的实例源码_SpringBoot数据库源码解析Template实例化操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python加go_[Python异步博
- 下一篇: 多个网页用一个html,在多个页面使用同