springboot 项目启动检查是否需要创建数据库。不存在就执行初始化脚本。

本文介绍如何在SpringBoot项目启动时检查MySQL数据库是否存在,若不存在则自动执行初始化脚本。通过配置application.yml,使用@Configuration、@PostConstruct等注解,确保在正确的时间执行数据库检查和初始化。此外,还提到了@DependsOn用于控制bean初始化顺序,以及ApplicationContextInitializer接口的另一种实现方式。
摘要由CSDN通过智能技术生成

背景: 因为项目需要部署到项目现场,新的电脑环境虽然安装了MySQL,但是不一定配置了MySQL环境变量,加上部署人员不一定会执行数据库脚本。每次通过Navicat等软件也比较麻烦。所以想着在项目启动前检查是否存在数据库,如果不存在就创建数据库并且执行数据库脚本。如果存在就跳过。

项目配置文件application.yml

#环境配置
database:
  #初始化数据名称
  customDatabaseName: aaaaa
  #初始化数据文件名称
  initDatabaseFileName: bbbbbb
spring:
  application:
    name: xxxxx
  profiles:
    # 配置当前项目环境  值在常量类中统一管理
    active: ssssss
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driverClassName: com.mysql.jdbc.Driver
      username: root
      password: root
      url: jdbc:mysql://localhost:3306/xxxxx?useUnicode=true&characterEncoding=UTF-8&useSSL=false
      initialSize: 5
      minIdle: 5
      maxActive: 20
      maxWait: 60000
      validationQuery: select 1
      validationQueryTimeout: 5
      testOnBorrow: false
      testOnReturn: false
      testWhileIdle: true
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 300000
      filters: stat
      webStatFilter:
        enabled: true
        urlPattern: /api/*
        sessionStatEnable: true
        sessionStatMaxCount: 1000
        profileEnable: true
      statViewServlet:
        enabled: true
        urlPattern: /druid/*
        resetEnable: false
        loginUsername: admin
        loginPassword: admin
      filter:
        stat:
          enabled: true
          mergeSql: true

检查数据库执行类:

@Configuration 知识点
用于定义配置类,可替换XML配置文件,被注解的类内部包含一个或多个@Bean注解方法。可以被AnnotationConfigApplicationContext或者AnnotationConfigWebApplicationContext 进行扫描。用于构建bean定义以及初始化Spring容器。

@PostConstruct说明
被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。

@PreConstruct说明
被@PreConstruct修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreConstruct修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前

3.程序实践(检查是否存在指定的数据库–不存在执行初始化脚本-否则跳过)

package com.xxx.xxxxx.common.base.config;

import com.xxx.xxxxxx.common.base.util.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.sql.*;

/**
 * Package: com.xxx.xxxxxx.common.base.config
 *
 * @author: yxs
 * @created Date: 2021/1/15
 * @decription:
 */
@Configuration
public class DatabaseInitConfig {
   

    private static final Logger LOG = LoggerFactory
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值