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

背景: 因为项目需要部署到项目现场,新的电脑环境虽然安装了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
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 基于SpringBoot快速开发的爬虫项目源码+项目使用说明+sql数据库.zip 基于SpringBoot快速开发的爬虫项目源码+项目使用说明+sql数据库.zip 基于SpringBoot快速开发的爬虫项目源码+项目使用说明+sql数据库.zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 1 项目简介 1.1 功能介绍 基于WebMagic-0.7.3开源框架实现的爬虫项目 基于SpringBoot框架搭建 支持爬取主流新闻网站的新闻数据 支持爬取东方财富网A股所有股票250日行情,数据量达到100万 支持自动更新数据 支持CCTV欧洲杯2020比赛数据爬取 1.2 数据落库位置 新闻数据存储在MongoDB 股票数据存储在MySQL的stock数据库 1.3 目前支持爬取网站: 新闻 腾讯新闻 凤凰资讯 股票 东方财富 个股信息 东方财富 k线信息 东方财富 交易日信息 东方财富 新股信息 竞技赛事 CCTV 欧洲杯2020赛事 2 使用说明 2.1 数据库准备 1. 准备有效MongoDB、MySQL数据库,并配置到resources/application-dev.yml 2. 初始化数据库 mongoDB脚本:doc/mongoDB.sql MySQL脚本:doc/stock.sql 2.2 启动程序 1. 执行 src/test/java/com/aposs/box/spider/domain/stock/StockTest.java 的 runStockInfoSpiderTest 方法,即可爬取A股所有股票清单 2. 从com.aposs.box.spider.BoxSpiderApplication类启动项目,即可启动服务定时爬取A股行情 2.3 爬取股票数据说明 2.3.1 初始化 tbl_stock_info 表 开始爬取股票k线数据前,需要确认tbl_stock_info表有数据,因为程序是依赖此表中的股票数据执行爬取任务的; 初始化或更新 tbl_stock_info 表的数据入口为: > com.aposs.box.spider.service.StockSpiderService.runStockInfoSpider 也可以选择执行 doc/tbl_stock_info.sql 脚本初始化 tbl_stock_info 表数据,但是可能漏掉新股 2.3.2 爬取A股所有股票250日行情 以下方法为爬取入口为,传入参数 250 即可开始爬取所有股票250日行情 > com.aposs.box.spider.service.StockSpiderService.runKlineSpider(java.lang.Integer) 2.4 通用爬虫(包括各种赛事、新闻爬取) 1. 初始化爬虫元数据表 tbl_spider_mate_data(数据库脚本:doc/tbl_spider_mate_data.sql) 2. 启动项目即可自动爬取相关数据到mongoDB对应的集合中(集合名称为{spider_name})
### 回答1: 您可以使用Spring Boot的JPA或MyBatis等ORM框架来创建MySQL表。这些框架可以自动创建表结构,您只需要在实体类中定义好对应的字段即可。如果您需要手动创建表,可以使用MySQL的命令行工具或者可视化工具如Navicat等来执行SQL语句创建表。 ### 回答2: 若从Gitee上拉取下来的Spring Boot项目没有数据库脚本,可以按照以下步骤手动创建MySQL表: 1. 在MySQL数据库创建一个新的数据库,可以使用命令行工具(如MySQL命令行、Navicat等)或可视化工具(如MySQL Workbench)。 ``` CREATE DATABASE database_name; ``` 2. 在Spring Boot项目的`src/main/resources`目录下创建一个新的SQL脚本文件,例如`schema.sql`,用于定义创建表结构的SQL语句。 3. 编辑`schema.sql`文件,按照需要定义表结构、字段、约束等信息。例如,创建一个名为`user`的表: ``` CREATE TABLE user ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, password VARCHAR(100) NOT NULL ); ``` 4. 保存并关闭`schema.sql`文件。 5. 确保在Spring Boot项目的`application.properties`或`application.yml`文件中正确配置数据库连接信息,包括用户名、密码、数据库名称、连接URL等。 6. 启动Spring Boot项目,它将自动运行数据库脚本,并创建相应的表。 如果项目中涉及到其他数据操作,例如添加初始数据、修改表结构等,可以根据需要在SQL脚本中进行相应的操作。 总结而言,对于Gitee上拉取下来的Spring Boot项目,如果没有提供数据库脚本,我们可以手动创建MySQL表,并在Spring Boot启动时使用SQL脚本定义表结构。 ### 回答3: 当我们使用Giee拉取下来的Spring Boot项目中没有数据库脚本时,我们可以通过以下步骤来创建MySQL表: 1. 打开项目,在项目的 src/main/resources 目录下找到 application.properties(或 application.yml)文件,确保文件中已经配置好了MySQL数据库的连接信息,包括数据库的URL、用户名和密码。 2. 打开MySQL客户端,使用连接信息登陆到MySQL数据库。 3. 在MySQL客户端中创建一个对应的数据库,可以使用如下命令: ``` CREATE DATABASE database_name; ``` 4. 运行Spring Boot项目,确保项目能够正常启动。 5. 打开浏览器,在地址栏中输入 `http://localhost:<port>/actuator`,其中 `<port>` 是项目运行的端口号。这将会打开Actuator端点的页面。 6. 在Actuator页面中找到 `flyway` 或 `liquibase` 的端点,这些是数据库迁移工具,可以用于创建数据库表结构。 7. 点击进入 `flyway` 或 `liquibase` 的端点,查看当前数据库的状态。 8. 如果数据库没有任何迁移记录,那么可以创建一个新的迁移脚本。在项目的 `src/main/resources/db/migration` 目录下创建一个新的SQL文件,命名方式为 `V{版本号}__{描述}.sql`,其中 `{版本号}` 可以是数字序列,如 `1`,`2`,`3`,依次递增,`{描述}` 是对这个迁移脚本的描述,比如 `create_table_users`。 9. 在新创建的迁移脚本中,编写SQL语句来创建表结构,可以使用 `CREATE TABLE` 语句。 10. 保存并关闭迁移脚本。 11. 重新启动Spring Boot项目数据库迁移工具将会自动检测到新的脚本执行,从而创建 MySQL 数据库中的表。 通过以上步骤,我们可以在没有数据库脚本的情况下,通过Spring Boot项目自带的数据库迁移工具来创建MySQL表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值