Spring Boot中自动执行sql脚本的实现
说明:所有的代码基于SpringBoot2.0.3版本
背景
在应用程序启动后,可以自动执行建库、建表等SQL脚本.下文中以要自动化执行people.sql脚本为例说明,脚本在SpringBoot工程中的路径为:classpath:people.sql,脚本的具体内容如下:
CREATETABLEIFNOTEXISTSpeople( persion_idBIGINTNOTNULLAUTO_INCREMENT, first_nameVARCHAR(20), last_nameVARCHAR(20), PRIMARYKEY(persion_id) );
实现核心
在SpringBoot的架构中,DataSourceInitializer类可以实现自动执行脚本的功能。通过自定义DataSourceInitializerBean就可以实现按照业务要求执行特定的脚本。
实现方法
前提
已经构建了DataSourceBean。
方法
通过@Configuration、@Bean和@Value三个注解实现自定义DataSourceInitializerBean,现在Bean的定义中实现自动化执行脚本的业务逻辑。
代码
importorg.springframework.beans.factory.annotation.Value;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
importorg.springframework.core.io.Resource;
importorg.springframework.jdbc.datasource.init.DataSourceInitializer;
importorg.springframework.jdbc.datasource.init.DatabasePopulator;
importorg.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
importjavax.sql.DataSource;
@Configuration
publicclassBatchTaskDataSourceInitializer{
/**
*构建Resource对象
*/
@Value("classpath:schema-all.sql")
privateResourcebusinessScript;
/**
*自定义Bean实现业务的特殊需求
*@paramdataSource
*@return
*/
@Bean
publicDataSourceInitializerdataSourceInitializer(finalDataSourcedataSource){
finalDataSourceInitializerinitializer=newDataSourceInitializer();
//设置数据源
initializer.setDataSource(dataSource);
initializer.setDatabasePopulator(databasePopulator());
returninitializer;
}
privateDatabasePopulatordatabasePopulator(){
finalResourceDatabasePopulatorpopulator=newResourceDatabasePopulator();
populator.addScripts(businessScript);
returnpopulator;
}
}
到此这篇关于SpringBoot中自动执行sql脚本的实现的文章就介绍到这了,更多相关SpringBoot自动执行sql内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!