zoukankan      html  css  js  c++  java
  • Spring Boot中自动执行sql脚本

    说明:所有的代码基于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类可以实现自动执行脚本的功能。通过自定义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;
    @Configuration
    public 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;
        }
    }
  • 相关阅读:
    微信小程序----导航栏滑动定位(实现CSS3的position:sticky效果)
    微信小程序----侧滑菜单(Popup---左侧滑动,右侧不动)(MUI侧滑导航)
    微信小程序----侧滑菜单(Popup----左侧不动,右侧滑动)(MUI侧滑导航)
    微信小程序----gallery slider(图片轮播)组件
    微信小程序----页面生命周期
    微信小程序----App生命周期
    HDU-1180-诡异的楼梯
    HDU-2031-进制转换
    POJ-1852-Ants
    POJ-2386-Lake Counting
  • 原文地址:https://www.cnblogs.com/felixzh/p/10796378.html
Copyright © 2011-2022 走看看