首页 > 数据库 >springboot启动自动执行sql脚本

springboot启动自动执行sql脚本

时间:2023-04-20 23:24:10浏览次数:31  
标签:脚本 jdbc springboot sql boot springframework org import

一:
package com.lianzhu.bigdata.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;

import javax.sql.DataSource;

@Slf4j
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })
@Configuration
public class CommandLineStartupRunner  implements CommandLineRunner {
    @Bean("pGdata")
    @ConfigurationProperties(prefix="spring.datasource.gangbang")
    public DataSource pGdata() {
        return DataSourceBuilder.create()
                .build();
    }
//    @Autowired
//    DataSource pGdata;
    @Override
    public void run(String... args) throws Exception {
        log.info("执行sql建表语句");
        Resource resources = new ClassPathResource("operation.sql");
        ResourceDatabasePopulator resourceDatabasePopulator = new     ResourceDatabasePopulator();
        resourceDatabasePopulator.addScripts(resources);
        resourceDatabasePopulator.execute(pGdata() );
        log.info("建表语句执行完成");

    }
}
二:
package com.lianzhu.bigdata.config;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
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;

/**
 * 自定义启动创建sql  DataSourceInitializer
 */
@Configuration
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })
public class BatchTaskDataSourceInitializer {

    /**
     * 构建Resource对象
     */
    @Value("classpath:operation.sql")
    private Resource businessScript;

    /**
     * 自定义Bean实现业务的特殊需求
     * @param dataSource
     * @return
     */
    @Bean
    public DataSourceInitializer dataSourceInitializer(@Qualifier("pGdata") DataSource dataSource) {
        final DataSourceInitializer initializer = new DataSourceInitializer();
        // 设置数据源
        initializer.setDataSource(dataSource);
        initializer.setDatabasePopulator(databasePopulator());
        return initializer;
    }
    @Bean("pGdata")
    @ConfigurationProperties(prefix="spring.datasource.gangbang")
    public DataSource pGdata() {
        return DataSourceBuilder.create()
                .build();
    }
    private DatabasePopulator databasePopulator() {
        final ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
        populator.addScripts(businessScript);
        return populator;
    }
}

 

 

springboot
初始Bean
DataSourceInitializer 会执行sql语句

 

标签:脚本,jdbc,springboot,sql,boot,springframework,org,import
From: https://www.cnblogs.com/wangbiaohistory/p/17338736.html

相关文章

  • Python 判断服务端口是否被占用脚本
    背景自动注册服务时判断端口是否被占用代码详情importsocketdefcheck_port(address,port):#创建套接字对象sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#检查端口是否占用result=sock.connect_ex((address,port))#关闭套接字......
  • mysql数据库学习1-cmd中乱码怎么办
    由于今天学习orcal,于是便顺便看下mysql,不看不知道,一看吓一跳,自己竟然不知道怎么用cmd登陆mysql。荒废了如此!首先,我们在cmd中要输入用户名和密码,此处的登陆方式不同于sqlplus;mysql-u用户名-p密码在查看当前用户下的表列表时,发现有几个是乱码,因为实在navicat中创建的,所以在编......
  • ubuntu 安装挂载mysql
    因为有两台电脑,所以准备把ubuntu电脑作成对外服务提供,各种数据库,中间件都使用docker安装管理,然后挂载配置和日志到本地,提供给另一台电脑的对外服务。安装dockersudoaptsearchdockersudoaptinstalldocker.io看到很多安装都繁琐,我也还是在初步使用,如上安装暂时没有发现......
  • 玩一下mysql
     我电脑版本的mysql是5.7.29,此时InnoDB已经是默认的存储引擎存储引擎是基于表的,而不是数据库MyISAM和InnoDB有什么区别?MyISAM不支持事务和行级锁,不支持外键,最大缺陷为崩溃后无法安全恢复。Mysql日志:常见的日志都有什么用?(针对InnoDB引擎)错误日志、二进制日志、一般查询日志......
  • SpringBoot + WebFlux + Spring Security ,SecurityContextHolder.getContext().getA
    解决方案直接在Controller接口方法参数中写入org.springframework.security.core.Authentication,如下:@GetMapping(path="/test")publicMono<Response<?,?>>test(Authenticationauthentication){returnMono.just(ResponseUtil.success(authentica......
  • MySQL大量脏数据,如何只保留最新的一条?
    因为系统的一个Bug,导致数据库表中出现重复数据,需要做的是删除重复数据且只保留最新的一条数据。具体场景是这样的有张订单关联额外费用表,而且一个订单号(order_no)记录只能关联同一个费用(cost_id)一次,但是数据库中出现了同一个订单号关联同一个费用n次当然有人会说上面的问......
  • SQL增删改查
    SQL语句SQL 是结构化查询语言,专门用来访问和处理数据库的编程语言。能够以编程的形式操作数据库里的数据。SQL 是一门数据库编程语言使用SQL 语言编写出来的代码叫做 SQL 语句SQL 语言只能在关系型数据库(MySQL)中使用。非关系型数据库(MongoDB)中不能使用SQL 可以对数......
  • MySQL 中常见的几种高可用架构部署方案
    MySQL中的集群部署方案前言MySQLReplicationInnoDBClusterInnoDBClusterSetInnoDBReplicaSetMMMMHAGaleraClusterMySQLClusterMySQLFabric参考MySQL中的集群部署方案前言这里来聊聊,MySQL中常用的部署方案。MySQLReplicationMySQLReplication是......
  • Mysql添加用户和设置权限的操作方法
    Mysql添加用户和设置权限的操作方法 更新时间:2022年07月28日09:42:08 作者:怪 咖@  https://www.jb51.net/article/257120.htm这篇文章主要介绍了Mysql添加用户和设置权限的操作方法,主要包括管理用户,权限控制的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具......
  • SQL Server Cross Join、Cross Apply和Outer Apply
    先简单了解下crossapply的语法以及会产生什么样的结果集吧!示例表:SELECT*FROMtableACROSSAPPLYtableB两张表直接连接,不需要任何的关联条件,产生的结果就是这两张表的笛卡儿集,在这里和上一篇帖子讲的crossjoin交叉连接的结果集是一样的相当于:select*fromtableA,tabl......