maven:sql-maven-plugin插件执行sql脚本

sql-maven-plugin插件提供了sql脚本的执行功能,允许用户执行指定的sql脚本文件或语句。

最近在进行一个项目是基于maven管理的java开发项目,其中有一个环节要对数据库初始化创建表,需要在maven中执行,正好有机会学习了sql-maven-plugin的使用.

关于sql-maven-plugin的详细说明参见http://www.mojohaus.org/sql-maven-plugin

下面的maven脚本实现的功能就是在mysql数据库中执行指定的sql脚本(create_tables.sql)来创建表:

run-sql.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>yourGroupId</groupId>
  <artifactId>yourArtifactId</artifactId>
  <!--这里package不能使用默认的jar,否则不会执行插件-->
  <packaging>maven-plugin</packaging>
  <name>facelog-sql</name>
  <build>
    <plugins>        
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>sql-maven-plugin</artifactId>
        <version>1.5</version>
        <dependencies>
          <!-- 定义依赖的数据库驱动jar包(mysql) -->
          <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.43</version>
          </dependency>  
        </dependencies>
        <configuration>
          <!-- 定义数据库连接参数 -->
          <driver>com.mysql.jdbc.Driver</driver>
          <url>jdbc:mysql://localhost:3306/test</url>
          <username>root</username>
          <password></password>
          <!-- 指定要执行的sql脚本 'sql'文件夹为脚本所在文件夹下的子文件夹 -->
          <srcFiles>
              <srcFile>${project.basedir}/sql/create_tables.sql</srcFile>
          </srcFiles>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

运行方式如下:

# 因为上面的脚本我没有使用缺省的文件名pom.xml,所以maven执行的时候要用-f 指定文件名
mvn -f run-sql.xml sql:execute

定义多个独立执行的execution

上面的脚本可以一次性执行一个或多个sql脚本,如果我们希望每个脚本可以在命令行分别独立执行,那么就要定义多个execution来实现。 比如我们将删除表的语句和建表语句分成两个文件(clean_tables.sql,create_tables.sql),希望在命令行分别执行两个脚本,那么 上面脚本就修改成如下的样子:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>net.gdface.facelog</groupId>
  <artifactId>facelog-sql</artifactId>
  <!--这里package不能使用默认的jar,否则不会执行插件-->
  <packaging>maven-plugin</packaging>
  <name>facelog-sql</name>
  <build>
    <plugins>        
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>sql-maven-plugin</artifactId>
        <version>1.5</version>
        <dependencies>
          <!-- 定义依赖的数据库驱动jar包(mysql) -->
          <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.43</version>
          </dependency>  
        </dependencies>
        <configuration>
          <!-- 定义数据库连接参数 -->
          <driver>com.mysql.jdbc.Driver</driver>
          <url>jdbc:mysql://localhost:3306/test</url>
          <username>root</username>
          <password></password>
        </configuration>
        <executions>
          <!-- 删除表操作 -->
          <execution>
            <id>clean-tables</id>
            <configuration>
              <srcFiles>
                <srcFile>${project.basedir}/sql/clean_tables.sql</srcFile>
              </srcFiles>
            </configuration>
          </execution> 
          <!-- 创建表操作 -->
          <execution>
            <id>create-tables</id>
            <configuration>
              <srcFiles>
                <srcFile>${project.basedir}/sql/create_tables.sql</srcFile>
              </srcFiles>
            </configuration>
          </execution> 
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

命令行执行如下:

# 通过@execution-id的方式指定执行id为‘clean-tables’的execution
mvn -f run-sql.xml sql:execute@clean-tables
# 通过@execution-id的方式指定执行id为‘create-tables’的execution
mvn -f run-sql.xml sql:execute@create-tables

注意 Maven 3.3.1以上版本支持上述的@execution-id 的用法 参见 https://stackoverflow.com/questions/3166538/how-to-execute-maven-plugin-execution-directly-from-command-line

参考资料:

《sql-maven-plugin usage》 《execute-mojo》 《Maven Properties Guide》

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏西安-晁州

nodejs记录1——async函数

其实手动配置babel环境并不难,记录下步骤: 1、首先npm init创建一个nodejs项目 2、全局安装babel-cli处理工具:npm i babel...

2150
来自专栏Python研发

来杯咖啡看Pecan

文章内容来自官方文档:http://pecan.readthedocs.io/en/latest/quick_start.html

1703
来自专栏difcareer的技术笔记

使用AndroidStudio调试AOSP源码

当我们在AOSP中加入了自己的代码,或者当我们阅读源码时,一个迫切的需求就是调试,下面讲述如何利用AndroidStudio调试Java部分的代码。

783
来自专栏后端技术探索

Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布

由于最近工作的需要,本人学习了一下利用高性能web server - Nginx,来发布C/C++编写的fastCGI程序,详细细节如下。

603
来自专栏性能与架构

mysql分布式前端代理 - Amoeba最简配置案例

image.png 主要配置文件说明 1)amoeba.xml 定义客户端如何连接amoeba等基础信息 2)dbServers.xml Amoeba作为数据...

3196
来自专栏后端技术探索

Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布

由于最近工作的需要,本人学习了一下利用高性能web server - Nginx,来发布C/C++编写的fastCGI程序,详细细节如下。

692
来自专栏happyJared

Linux私房菜:文件目录管理及常见命令

581
来自专栏老马寒门IT

原生AJAX请求教程

ajax 即 Asynchronous Javascript And XML,AJAX 不是一门的新的语言,而是对现有持术的综合利用。本质是在 HTTP 协议的...

880
来自专栏HTML5学堂

PHP中POST和GET的区别

HTML5学堂:在JavaScript当中,存在“get和post方法的区别”这一辨析知识。其实get和post是向服务器端请求/提交数据的两种方式。对于PHP...

2785
来自专栏性能与架构

5个实用的Linux命令行技巧

1. 输出内容格式化 例如 mount 命令的输出结果看起来很费劲 ? 可以使用 column 对其进行格式化 mount | column -t ? 再比如有...

2716

扫码关注云+社区