前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >maven:sql-maven-plugin插件执行sql脚本

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

作者头像
10km
发布2018-01-03 12:04:56
1.6K0
发布2018-01-03 12:04:56
举报
文章被收录于专栏:10km的专栏10km的专栏

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

代码语言:javascript
复制
<?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>

运行方式如下:

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

定义多个独立执行的execution

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

代码语言:javascript
复制
<?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>

命令行执行如下:

代码语言:javascript
复制
# 通过@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》

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年08月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义多个独立执行的execution
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档