【问题标题】:Datasource for Liquibase as a Servlet Listener作为 Servlet 侦听器的 Liquibase 数据源
【发布时间】:2012-12-06 01:55:09
【问题描述】:

我开始在我的 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,以防万一。

【问题讨论】:

    标签: java jakarta-ee struts jndi liquibase


    【解决方案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("");
    

    此代码 sn-p 未经测试,但应该是 s.th。像那样。您可以将其添加到您自己的 Servlet Context Initializer 侦听器或您的应用程序特定代码中 - 您手头有 Hibernate 配置并可以检索 DataSource 的任何地方。首先,请查看liquibase.servlet.LiquibaseServletListener 的来源如何做到这一点。

    【讨论】:

      猜你喜欢
      • 2017-09-27
      • 1970-01-01
      • 2023-03-20
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      相关资源
      最近更新 更多