2013-11-15 21 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