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