如何动态/编程配置hibernate使用h2数据库jndi连接池?

时间:2018-01-17 16:18:41

标签: hibernate tomcat jndi h2 connection-pooling

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配置文件一直存在的问题是数据库位置/网址会根据开发/测试/生产而发生变化。我也不喜欢明文用户/ pw。

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

1 个答案:

答案 0 :(得分:0)

我无法想象用Tomcat JDBC连接池包装H2 DataSource,但我发现H2提供了它自己的连接池和DataSource实现:

// 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现在似乎很开心。

相关问题