当前位置:首页 > 编程语言 > 数据库相关 > 正文内容

Springboot启动初始化数据执行sql脚本

lcpsky2年前 (2022-11-05)数据库相关370

方法一:配置application.yml文件

纯配置。最方便简洁,是最优选择。

yml文件:


 spring:

datasource:     

schema: classpath:schema.sql

data: classpath:data.sql

 initialization-mode: always


再在resource目录下添加schema.sql和data.sql的文件。schema中主要用于创建表的语句,data中主要存放插入数据及更新操作。

源码中是先执行schema,在执行data,并且schema中不能为空文件,所以可以在schema.sql文件中随便写一行sql,不产生沉余数据就行,比如:show tables;

需要注意的:

springboot 2.0以上的版本initialization-mode属性必须要有。

启动类中的 DataSourceAutoConfiguration.class注解会让配置失效,或者druid的防火墙也会让此方法失效。


方法二:自定义方法

@Component

public class CustomizeDataSourceInitializer implements InitializingBean{

@Value("classpath:sql/data.sql")

    private Resource dataScript;


    @Bean

    public DataSourceInitializer dataSourceInitializer(final DataSource dataSource) {

        final DataSourceInitializer initializer = new DataSourceInitializer();

        // 设置数据源

        initializer.setDataSource(dataSource);

        initializer.setDatabasePopulator(databasePopulator());

        return initializer;

    }


    private DatabasePopulator databasePopulator() {

     System.out.println("==================sql脚本正在执行==================");

        final ResourceDatabasePopulator populator = new ResourceDatabasePopulator();

        populator.addScripts(dataScript);

        System.out.println("==================sql脚本初始化完成==================");

        return populator;

    }


@Override

public void afterPropertiesSet() throws Exception {

}


然后在启动时执行方法就行,这里是实现InitializingBean接口来执行的。

springboot启动执行方法的方式有很多,选一种就行。


方法三:通过mybatis的ScriptRunner实现


@Component

public class CustomizeDataSourceInitializer implements InitializingBean{

    @Autowired

    ApplicationContext applicationContext;

 

    @Override

    public void afterPropertiesSet() throws Exception {

        //初始化schema

        initTableSchema();

    }

 

    private void initTableSchema() {

        DataSource dataSource = applicationContext.getBean(DataSource.class);

        try (Connection connection= dataSource.getConnection();

             Reader resourceAsReader = Resources.getResourceAsReader("sql/schema-init.sql");){

            ScriptRunner runner=new ScriptRunner(connection);

            runner.runScript(resourceAsReader);

        } catch (SQLException | IOException e) {

            logger.error("========================mysql建表异常===================", e);

        }

    }

    

    

}

 

参考文献:

【1】https://blog.csdn.net/liu_xue_xue/article/details/107180370

【2】https://blog.csdn.net/ssss_cccc/article/details/103957030


扫描二维码推送至手机访问。

版权声明:本文由软件技术记录发布,如需转载请注明出处。

本文链接:https://lcpsky.top/?id=33

分享给朋友:

“Springboot启动初始化数据执行sql脚本” 的相关文章

MyCat分库分表中间件研究

MyCat分库分表中间件研究

 MyCat分库分表中间件研究MyCat简介MyCat是安装在服务器上的中间件工具服务,业务服务可直接连接MyCat,由MyCat做sql改写分发结果归集,归并数据结果完全解耦,保证数据库的安全性,支持多种开发语言的连接。不用调整代码即可实现分库分表,将数据库连接地址改为MyCat的地址即...

MySQL8安装记录

MySQL8安装记录

配置文件my.ini[mysqld] # 设置3306端口 port=3307 # 设置mysql的安装目录 basedir=F:\\mysql-8.0.20 # 设置mysql数据库的数据的存放目录 datadir=F:\\mysql-8.0.20\\Da...

Springboot使用jfinal的数据库工具

1. maven依赖   <groupId>com.jfinal</groupId>    <artifactId>activerecord</artifactId>    <versi...