【问题标题】:How to dynamically/programmatically configure hibernate to use h2 database jndi connection pool?如何动态/以编程方式配置休眠以使用 h2 数据库 jndi 连接池?
【发布时间】:2018-06-26 14:19:39
【问题描述】:

Hibernate 抱怨连接池。首先,我尝试使用Tomcat JDBC Connection Pool

这需要在 context.xml 中进行资源配置:

<Resource
  name="jdbc/mydatasource"
  auth="Container"
  type="javax.sql.DataSource"
  factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
  username="user"
  password="pw"
  driverClassName="org.h2.Driver"
  url="jdbc:h2:path/to/db/dbname" />

xml 配置文件的问题是数据库位置/url 会根据开发/测试/生产而变化。我也不喜欢明文用户/密码。

所以我想知道如何在 webapp 启动期间以编程方式执行此操作。

【问题讨论】:

    标签: hibernate tomcat jndi h2 connection-pooling


    【解决方案1】:

    我想不出用 Tomcat JDBC 连接池包装 H2 数据源,但我发现 H2 提供了它自己的连接池和数据源实现:

    // JdbcConnectionPool implements DataSource
    org.h2.jdbcx.JdbcConnectionPool connectionPool = JdbcConnectionPool.create(dbUrl, user, pw);
    // java:comp/env is read-only, create subcontext that is writable
    // https://stackoverflow.com/questions/13734391/bind-jndi-datasource-in-tomcat
    new InitialContext().createSubcontext("mywebapp").bind("datasource", connectionPool);
    
    org.hibernate.cfg.Configuration configuration = new Configuration();
    configuration.setProperty("hibernate.connection.datasource", "mywebapp/datasource");
    configuration.setProperty("hibernate.dialect", H2Dialect.class.getName());
    

    Hibernate 现在似乎很开心。

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      • 2014-01-19
      • 2023-04-04
      • 2014-08-02
      • 2013-08-06
      相关资源
      最近更新 更多