(転)WebプロジェクトにおけるLiquiBaseによるデータベース自動更新


[size=medium]Webプロジェクトでは、servlet listenerを構成してLiquiBaseを使用してデータベースを自動的に更新できます.次の7つのステップが必要です.
1.データベース変更ログファイルを作成します.
2.変更ログファイル内に変更セットを作成します.
3.JNDIデータソースを構成します.
4.プロジェクトにパッケージliquibaseを追加します.
5.プロジェクトのwebを構成する.xmlファイル.
6.プロジェクトを開始します.
7.データベースの変更を確認します.
[/size]
Changelog.xml:
Htmlコードコレクションコード
  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.9
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.9.xsd">











columnNames="username" constraintName="username" />














Web.xml:
Htmlコードコレクションコード
  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
liquid

MySQL Test App

DB Connection
jdbc/test
javax.sql.DataSource
Container



LIQUIBASE_CHANGELOG
db.changelog.xml



LIQUIBASE_DATA_SOURCE
java:comp/env/jdbc/test



LIQUIBASE_FAIL_ON_ERROR
true



LIQUIBASE_CONTEXTS
jdbc/test



liquibase.servlet.LiquibaseServletListener



[size=medium]
上のwebを通ります.xmlファイルでは、listenerが構成されていることがわかります.LiquibaseServertListenerというクラスはサーブレットContextListenerを継承しています.サーブレットContextListenerはサーブレットContextのリスナーです.サーブレットContextがサーバ起動時にサーブレットContextが作成されるなど、サーブレットContextが変化すると、サーバがシャットダウンするとサーブレットContextは破棄されます.サーバが起動すると、LiquibaseServeretListenerのcontextInitialized()メソッドが呼び出され、このメソッドはデータベースとChangelogを比較する.xmlの違いにより、データベースが自動的に更新されます.
ではLiquiBaseはどのようにデータを更新しているのでしょうか.LiquibaseServiceServiceListenerが最初に呼び出されると、2つの特定のテーブルが作成されます.LiquiBase固有の最初のテーブルはdatabasechangelogと呼ばれ、データベースに適用されたすべての変更を追跡します.誰がデータベースの変更を実行したのか、理由を追跡するのに役立ちます.2番目にLiquiBaseに特化したテーブルはdatabasechangelockで、データベース変更ロックを持つユーザーを識別します.LiquiBaseはdatabasechangelogの記録とChangelogを比較する.xmlのchangeSetで、データベースを更新します.
Liquidプロジェクト1でChangelog.xmlには1つのchangesetしかありません
[/size]
Xmlコードコレクションコード
  










columnNames="username" constraintName="username" />


[size=medium]
プロジェクト1を開始すると、LiquiBaseはテーブルuseraccountを自動的に作成し、フィールドuserid,accountstate,expiredDate,usernameを追加します.Databasechangelogテーブルには、表示されるレコードが追加されます.
Liquidプロジェクト2でChangelog.xmlにchangesetが1つ追加されました
[/size]
Xmlコードコレクションコード
  








[size=medium]
プロジェクト2を起動すると、LiquiBaseは更新されていることがわかりますので、新規のもののみ更新します.フィールドgenderを追加し、値を「M」に設定します.テーブルuseraccountを削除し、テーブルDatabasechangelogのすべてのレコードを削除し、プロジェクト2を再起動すると、LiquiBaseはテーブルuseraccountを作成し、フィールドuserid、accountstate、expiredDate、username、genderを追加し、genderの値を「M」に設定します.
上記のLiquiBaseの特性によって、毎回のデータベース変更をchangeSetに記入し、LiquiBaseを使用してデータベースを更新すれば、Changelogを更新することができます.xmlファイルは、データベースのバージョンを制御するバージョン制御を行います.ソフトウェアをアップグレードすると、データベースを自動的に更新することもできます.
参考資料:
IBMはLiquiBaseを使用してデータベース変更を管理する:http://www.ibm.com/developerworks/cn/java/j-ap08058/index.html
LiquiBase公式サイト:http://www.liquibase.org/(国内のIPが入らない可能性がありますので、エージェントを使います)[/size]