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启动期间以编程方式执行此操作。
答案 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现在似乎很开心。