博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot中自动执行sql脚本
阅读量:5231 次
发布时间:2019-06-14

本文共 1800 字,大约阅读时间需要 6 分钟。

说明:所有的代码基于SpringBoot 2.0.3版本

背景

在应用程序启动后,可以自动执行建库、建表等SQL脚本.下文中以要自动化执行people.sql脚本为例说明,脚本在SpringBoot工程中的路径为:classpath:people.sql,脚本的具体内容如下:

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));

 

实现核心

在SpringBoot的架构中,类可以实现自动执行脚本的功能。通过自定义DataSourceInitializer Bean就可以实现按照业务要求执行特定的脚本。

实现方法

  • 前提
    已经构建了DataSource Bean。
  • 方法
    通过@Configuration、@Bean和@Value三个注解实现自定义DataSourceInitializer Bean,现在Bean的定义中实现自动化执行脚本的业务逻辑。
  • 代码
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 {    /**     * 构建Resource对象     */    @Value("classpath:schema-all.sql")    private Resource businessScript;    /**     * 自定义Bean实现业务的特殊需求     * @param dataSource     * @return     */    @Bean    public DataSourceInitializer dataSourceInitializer(final DataSource dataSource) {        final DataSourceInitializer initializer = new DataSourceInitializer();        // 设置数据源        initializer.setDataSource(dataSource);        initializer.setDatabasePopulator(databasePopulator());        return initializer;    }    private DatabasePopulator databasePopulator() {        final ResourceDatabasePopulator populator = new ResourceDatabasePopulator();        populator.addScripts(businessScript);        return populator;    }}

 

转载于:https://www.cnblogs.com/felixzh/p/10796378.html

你可能感兴趣的文章