我开始在 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 以及如何使用 JNDI。
我应该在特定的上下文参数值中写什么?有没有办法做一些类似于我对 hibernate 所做的事情?
我正在使用 Tomcat 6.0,以防有帮助。
最佳答案
属性liquibase.datasource
引用Web应用程序JNDI目录中DataSource
对象的JNDI名称,如documented在 Liquibase 手册中。
由于您没有使用 JNDI,因此无法使用 Liquibase 提供的默认 Servlet 监听器 LiquibaseServletListener
。我假设您直接创建 JDBC 资源,例如在您的网络应用程序中。您可能在某处有一个 C3P0 DataSource
连接池,或者以某种方式访问底层 JDBC Connection
。
如果是这种情况,您可以自行初始化并将 JDBC Connection
注入(inject) 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("");
此代码片段未经测试,但应该是……。像那样。您可以将其添加到您自己的 Servlet Context Initializer 监听器中或应用程序特定的代码中 - 您手头有 Hibernate 配置并且可以检索数据源的任何位置。首先,查看一下 liquibase.servlet.LiquibaseServletListener
的源代码如何做到这一点。
关于java - Liquibase 的数据源作为 Servlet 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13735766/