2013-11-15 27 views
2

我有一个Java Maven项目。我正在使用liquibase更新数据库。在生产环境中执行liquibase更新

本地,更新我的分贝,我只是在命令行中运行:

mvn liquibase:update 

在生产环境中,我没有安装Maven的做。

我需要实现的是通过控制台,执行命令在特定的类路径中运行liquibase脚本。

任何想法?

编辑:

好的。我试图按照这种方法。我把一个文件夹中的以下项目:

  1. liquibase罐子

  2. 战争包含我的应用程序和liquibase变更

  3. liquibase.properties:它包含以下内容:

    url = jdbc:jtds:sqlserver:// xxxxxxxx:xxxx/xxxxx

    username = xxx

    密码= XXXXX

    类路径= war_file.war

    changeLogFile = WEB-INF /类/ SQL/PROJECTNAME/liquibase/liquibase.xml

然后,在控制台中,我执行:

java -jar liquibase-core-3.0.5.jar update 

它的工作原理!它找到我的liquibase.xml文件并启动liquibase更新。

,但是当它是指liquibase.xml是里面包含在lib另一个jar文件,它失败了,因为我在liquibase.xml因为它包括:

<include file="../other_module/src/main/resources/sql/projectName/liquibase/liquibase.xml" /> 

我怎么可以添加此“包含”而不做“src/main/resources”并让它找到这个xml?

+0

你是什么意思的“在特定的类路径”?在命令行上运行liquibase时会出现什么问题? – Jens

+0

@Jens的事情是我需要直接在生产机器中执行更新,它没有Maven(我们不想安装它)。所以我找不到更新prod db的correctr过程是什么。 – Adri

+0

@Adri您已经从最初提出的问题大幅改变了问题。这是关于如何运行命令行客户端的新问题。问题在于您的类路径和您在liquibase文件中使用的文件系统路径的组合。引用在运行时不存在的路径....检查war文件中的文件。你会发现没有匹配的文件“../other_module/src/main/resources/sql/projectName/liquibase/liquibase.xml” –

回答

3

您的开发机器上运行的即updateSQL目标:

mvn liquibase:updateSQL 

您可以生成一个迁移脚本:

└── target 
    └── liquibase 
     └── migrate.sql 

这是我最喜欢的liquibase的功能之一。有时客户坚持所有数据库模式更改必须由其员工手动执行。

另一种选择是在应用程序中构建自动升级功能。请参阅servlet listener

+0

然后你需要访问数据库并手动执行它? – Adri

+0

@Adri正确。要在生产环境中使用liquibase,您需要安装java以及liquibase和jdbc jar的副本。而使用数据库服务器上已安装的任何db客户端工具可以将SQL文件运行到数据库中。 –

+0

@Adri:我们使用liquibase的方式与Mark概述的相同(使用'updateSQL'命令)。只有,我们不是用maven生成这个命令,而是使用命令行。我们也出于同样的原因这样做。我们有数据库人员控制生产数据库并喜欢看他们可以自己执行的脚本。 – Jens