Spring Boot中自動(dòng)執(zhí)行sql腳本的實(shí)現(xiàn)
說明:所有的代碼基于SpringBoot 2.0.3版本
背景在應(yīng)用程序啟動(dòng)后,可以自動(dòng)執(zhí)行建庫、建表等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;@Configurationpublic 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)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. CSS3+Js實(shí)現(xiàn)響應(yīng)式導(dǎo)航條2. ASP.NET MVC實(shí)現(xiàn)下拉框多選3. CSS3中Transition屬性詳解以及示例分享4. javascript xml xsl取值及數(shù)據(jù)修改第1/2頁5. 關(guān)于PHP中的Class的幾點(diǎn)個(gè)人看法6. JAVA教程 第八講 Java網(wǎng)絡(luò)編程(一)7. Java Red5服務(wù)器實(shí)現(xiàn)流媒體視頻播放8. Python中三維坐標(biāo)空間繪制的實(shí)現(xiàn)9. 利用js canvas實(shí)現(xiàn)五子棋游戲10. 利用CSS3新特性創(chuàng)建透明邊框三角
