Spring?Boot中自動(dòng)執(zhí)行sql腳本的方法實(shí)例
說明:所有的代碼基于SpringBoot 2.0.3版本
背景
在應(yīng)用程序啟動(dòng)后,可以自動(dòng)執(zhí)行建庫(kù)、建表等SQL腳本.下文中以要自動(dòng)化執(zhí)行people.sql腳本為例說明,腳本在SpringBoot工程中的路徑為:classpath:people.sql,腳本的具體內(nèi)容如下:
CREATE TABLE IF NOT EXISTS people( persion_id BIGINT NOT NULL AUTO_INCREMENT, first_name VARCHAR(20), last_name VARCHAR(20), PRIMARY KEY (persion_id) );
實(shí)現(xiàn)核心
在SpringBoot的架構(gòu)中,DataSourceInitializer類可以實(shí)現(xiàn)自動(dòng)執(zhí)行腳本的功能。通過自定義DataSourceInitializer Bean就可以實(shí)現(xiàn)按照業(yè)務(wù)要求執(zhí)行特定的腳本。
實(shí)現(xiàn)方法
- 前提
已經(jīng)構(gòu)建了DataSource Bean。 - 方法
通過@Configuration、@Bean和@Value三個(gè)注解實(shí)現(xiàn)自定義DataSourceInitializer Bean,現(xiàn)在Bean的定義中實(shí)現(xiàn)自動(dòng)化執(zhí)行腳本的業(yè)務(wù)邏輯。 - 代碼
import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.jdbc.datasource.init.DataSourceInitializer; import org.springframework.jdbc.datasource.init.DatabasePopulator; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import javax.sql.DataSource; @Configuration public class BatchTaskDataSourceInitializer { /** * 構(gòu)建Resource對(duì)象 */ @Value("classpath:schema-all.sql") private Resource businessScript; /** * 自定義Bean實(shí)現(xiàn)業(yè)務(wù)的特殊需求 * @param dataSource * @return */ @Bean public DataSourceInitializer dataSourceInitializer(final DataSource dataSource) { final DataSourceInitializer initializer = new DataSourceInitializer(); // 設(shè)置數(shù)據(jù)源 initializer.setDataSource(dataSource); initializer.setDatabasePopulator(databasePopulator()); return initializer; } private DatabasePopulator databasePopulator() { final ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.addScripts(businessScript); return populator; } }
注意
有兩點(diǎn)需要說明下:
- db文件夾下的腳本可能有多個(gè),所以,這里要使用PathMatchingResourcePatternResolver,讀取多個(gè).sql的文件;
- 獲取文件的路徑是classpath*:script/db/*.sql,classpath后加個(gè)星號(hào),意思是連jar包中的符合該規(guī)則的文件,都可以獲取到,因?yàn)樵擁?xiàng)目最終會(huì)打成jar包來(lái)運(yùn)行,如果不使用這個(gè)星號(hào),就會(huì)出現(xiàn)在開發(fā)的時(shí),沒有問題,等到了測(cè)試或生產(chǎn)環(huán)境,就會(huì)出現(xiàn)找不到sql文件問題。當(dāng)然,這里的文件規(guī)則,需要自己定義好,不要掃到了本不應(yīng)加載的其他包中的文件了。
總結(jié)
到此這篇關(guān)于Spring Boot中自動(dòng)執(zhí)行sql腳本的文章就介紹到這了,更多相關(guān)Spring Boot自動(dòng)執(zhí)行sql腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Javaweb狀態(tài)管理的Session和Cookie
這篇文章主要介紹了Javaweb狀態(tài)管理的Session和Cookie,將瀏覽器與web服務(wù)器之間多次交互當(dāng)做一個(gè)整體來(lái)處理,并且多次交互所涉及的數(shù)據(jù)(狀態(tài))保存下來(lái),需要的朋友可以參考下2023-05-05Spring框架應(yīng)用的權(quán)限控制系統(tǒng)詳解
在本篇文章里小編給大家整理的是關(guān)于基于Spring框架應(yīng)用的權(quán)限控制系統(tǒng)的研究和實(shí)現(xiàn),需要的朋友們可以學(xué)習(xí)下。2019-08-08Hadoop源碼分析四遠(yuǎn)程debug調(diào)試
本篇是Hadoop源碼分析系列文章第四篇,主要介紹一下Hadoop的遠(yuǎn)程debug調(diào)試步驟,后續(xù)本系列文章會(huì)持續(xù)更新,有需要的朋友可以借鑒參考下2021-09-09mybatis?獲取更新(update)記錄的id之<selectKey>用法說明
這篇文章主要介紹了mybatis?獲取更新(update)記錄的id之<selectKey>用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05SpringBoot使用Quartz無(wú)法注入Bean的問題及解決
這篇文章主要介紹了SpringBoot使用Quartz無(wú)法注入Bean的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Kotlin 基礎(chǔ)教程之?dāng)?shù)組容器
這篇文章主要介紹了Kotlin 基礎(chǔ)教程之?dāng)?shù)組容器的相關(guān)資料,需要的朋友可以參考下2017-06-06