2

web.xml ファイルで Liquibase の構成を開始していますが、 datasource 属性が何を参照しているのかわかりません。

<context-param>
  <param-name>liquibase.datasource</param-name>
  <param-value>java:comp/env/jdbc/default</param-value>
</context-param>

ドキュメントにはJNDIデータソースであると書かれていますが、私はSpringではなくStrutsを使用しており、現在の環境:

Configuration hibernateConfig = new Configuration();
hibernateConfig.addProperties("com/env.specific.properties");

正直なところ、JNDI とは何か、またどのように使用するかについてはまったくわかりません。

その特定の context-param 値には何を書くべきですか? 私が休止状態で行うのと同様のことを行う方法はありますか?

私は Tomcat 6.0 を使用しています。

4

1 に答える 1

2

プロパティは、Liquibase マニュアルに記載されているように、Web アプリケーションの JNDI ディレクトリ内のオブジェクトliquibase.datasourceの JNDI 名を参照します。DataSource

LiquibaseServletListenerJNDI を使用していないため、 Liquibase が提供するデフォルトのサーブレット リスナーは使用できません。たとえば、Web アプリケーション内で JDBC リソースを直接作成しているとします。おそらく、どこかに C3P0DataSource接続プールがあるか、基盤となる JDBCConnectionに何らかの方法でアクセスできます。

この場合、次のように、独自の初期化を行い、JDBCConnectionLiquibaseに注入できます。

DataSource dataSource = ... // get from Hibernate somehow
Connection connection = dataSource.getConnection();
JdbcConnection liquibaseConnection = new JdbcConnection(connection);
Liquibase liquibase = new Liquibase("mychangelog.xml",...,liquibaseConnection);
liquibase.update("");

このコード スニペットはテストされていませんが、s.th である必要があります。そのように。これは、独自の Servlet Context Initializer リスナーまたはアプリ固有のコード (Hibernate 構成が手元にあり、DataSource を取得できる任意の場所) に追加できます。まず、それを行う方法のソースをliquibase.servlet.LiquibaseServletListener調べてください。

于 2012-12-08T10:41:55.303 に答える