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 数据源,但我使用的是 Struts,而不是 Spring,并且在不同的属性文件(例如 hibernate.dev.properties、hibernate.test.properties)中有我的连接详细信息,我根据当前以编程方式加载这些文件环境:

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

老实说,我不知道什么是或如何使用 JNDI。

我应该在那个特定的上下文参数值中写什么?有什么方法可以做类似于我对休眠所做的事情吗?

我正在使用 Tomcat 6.0,以防万一。

4

1 回答 1

2

该属性liquibase.datasource是指Web 应用程序DataSource的 JNDI 目录中对象的 JNDI 名称,如Liquibase手册中所述。

由于您没有使用 JNDI,因此您不能使用LiquibaseServletListenerLiquibase 提供的默认 Servlet 侦听器。我假设您正在直接创建 JDBC 资源,例如在您的 Web 应用程序中。您可能在DataSource某处有一个 C3P0 连接池或以某种方式访问​​底层 JDBC Connection

如果是这种情况,您可以滚动自己的初始化并将 JDBCConnection注入Liquibase,如下所示:

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 回答