我开始在我的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是什么或如何使用。
我应该在特定的上下文参数值中写什么?有什么方法可以做类似于我对hibernate的操作吗?
我正在使用Tomcat 6.0,以防万一。
答案 0 :(得分:1)
属性liquibase.datasource
引用webapp的JNDI目录中DataSource
对象的JNDI名称,在Liquibase手册中为documented。
由于您没有使用JNDI,因此无法使用Liquibase提供的默认Servlet侦听器LiquibaseServletListener
。我假设您正在直接创建JDBC资源,例如在您的Web应用程序中。您可能在某处有一个C3P0 DataSource
连接池,或者以某种方式访问底层JDBC Connection
。
如果是这种情况,您可以进行自己的初始化并将JDBC Connection
注入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
如何做到这一点的来源。