Spring Boot中自動(dòng)執(zhí)行sql腳本的實(shí)現(xiàn)
說(shuō)明:所有的代碼基于SpringBoot 2.0.3版本
背景
在應(yīng)用程序啟動(dòng)后,可以自動(dòng)執(zhí)行建庫(kù)、建表等SQL腳本.下文中以要自動(dòng)化執(zhí)行people.sql腳本為例說(shuō)明,腳本在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í)行腳本的功能。通過(guò)自定義DataSourceInitializer Bean就可以實(shí)現(xiàn)按照業(yè)務(wù)要求執(zhí)行特定的腳本。
實(shí)現(xiàn)方法
前提
已經(jīng)構(gòu)建了DataSource Bean。
方法
通過(guò)@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;
}
}
到此這篇關(guān)于Spring Boot中自動(dòng)執(zhí)行sql腳本的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot自動(dòng)執(zhí)行sql內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springBoot啟動(dòng)時(shí)讓方法自動(dòng)執(zhí)行的幾種實(shí)現(xiàn)方式
- 解決Springboot項(xiàng)目啟動(dòng)后自動(dòng)創(chuàng)建多表關(guān)聯(lián)的數(shù)據(jù)庫(kù)與表的方案
- 解決spring boot啟動(dòng)掃描不到自定義注解的問(wèn)題
- Spring Boot 2 實(shí)戰(zhàn):自定義啟動(dòng)運(yùn)行邏輯實(shí)例詳解
- SpringBoot啟動(dòng)及自動(dòng)裝配原理過(guò)程詳解
- springboot 基于Tomcat容器的自啟動(dòng)流程分析
- springboot+idea熱啟動(dòng)設(shè)置方法(自動(dòng)加載)
- SpringBoot項(xiàng)目執(zhí)行腳本 自動(dòng)拉取最新代碼并重啟的實(shí)例內(nèi)容
- springboot自定義stater啟動(dòng)流程
- springboot自動(dòng)重啟的簡(jiǎn)單方法
- Spring Boot啟動(dòng)時(shí)調(diào)用自己的非web邏輯
- Spring Boot 項(xiàng)目啟動(dòng)自動(dòng)執(zhí)行方法的兩種實(shí)現(xiàn)方式
相關(guān)文章
Java設(shè)計(jì)模式之代理模式與裝飾模式實(shí)例詳解
這篇文章主要介紹了Java設(shè)計(jì)模式之代理模式與裝飾模式,結(jié)合具體實(shí)例形式分析了代理模式與裝飾模式的概念、功能、java實(shí)現(xiàn)方法與相關(guān)使用注意事項(xiàng),需要的朋友可以參考下2017-09-09
grade構(gòu)建閱讀spring源碼環(huán)境 Idea2020.3的過(guò)程
這篇文章主要介紹了grade構(gòu)建閱讀spring源碼環(huán)境 Idea2020.3,本文分步驟通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
自己動(dòng)手寫(xiě)的mybatis分頁(yè)插件(極其簡(jiǎn)單好用)
最近做了個(gè)項(xiàng)目,需要用到mybatis分頁(yè)功能,網(wǎng)上找了很多插件,都不太合適,于是就自己動(dòng)手寫(xiě)了個(gè)mybatis分頁(yè)插件功能,非常不錯(cuò),代碼簡(jiǎn)單易懂,需要的朋友參考下吧2016-11-11
Bloc事件流是一個(gè)阻塞隊(duì)列結(jié)論解析
這篇文章主要為大家介紹了Bloc事件流是一個(gè)阻塞隊(duì)列結(jié)論解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Java中關(guān)于isEmpty方法、null以及““的區(qū)別
這篇文章主要介紹了Java中關(guān)于isEmpty方法、null以及““的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
SpringBoot整合Freemarker實(shí)現(xiàn)頁(yè)面靜態(tài)化的詳細(xì)步驟
這篇文章主要介紹了SpringBoot整合Freemarker實(shí)現(xiàn)頁(yè)面靜態(tài)化,第一步要?jiǎng)?chuàng)建項(xiàng)目添加依賴,本文分步驟給大家詳細(xì)講解,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10
Java實(shí)現(xiàn)調(diào)用MySQL存儲(chǔ)過(guò)程詳解
相信大家都知道存儲(chǔ)過(guò)程是在大型數(shù)據(jù)庫(kù)系統(tǒng)中,一組為了完成特定功能的SQL語(yǔ)句集。存儲(chǔ)過(guò)程是數(shù)據(jù)庫(kù)中的一個(gè)重要對(duì)象,任何一個(gè)設(shè)計(jì)良好的數(shù)據(jù)庫(kù)應(yīng)用程序都應(yīng)該用到存儲(chǔ)過(guò)程。Java調(diào)用mysql存儲(chǔ)過(guò)程,實(shí)現(xiàn)如下,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-11-11
JAVA JSP頁(yè)面技術(shù)之EL表達(dá)式整理歸納總結(jié)
這篇文章主要介紹了java中JSP頁(yè)面技術(shù)之EL表達(dá)式概念作用以及語(yǔ)法等的使用,需要的朋友可以參考2017-04-04

