【发布时间】:2009-11-17 13:37:55
【问题描述】:
我在 jpa 中使用 hibernate,它是用 persistence.xml 配置的 是否可以从 Web 应用程序获取休眠连接属性?
谢谢。
【问题讨论】:
标签: hibernate web-applications jta
我在 jpa 中使用 hibernate,它是用 persistence.xml 配置的 是否可以从 Web 应用程序获取休眠连接属性?
谢谢。
【问题讨论】:
标签: hibernate web-applications jta
如果不使用反射并依靠 Hibernate 将来不会破坏您的代码,可能不会。您需要从 SessionFactory 获取属性,但它不是公开的,因此您必须通过反射找到 Field,然后使用 field.setAccessible 来访问它。比如:
Field f = SessionFactoryImpl.class.getDeclaredField("properties");
f.setAccessible(true);
Properties p = (Properties)f.get(sessionFactory);
然后使用Environment中的常量拉出相关设置。如果您正在寻找实际的数据库连接设置并且您的应用正在使用 jndi,那么您可以使用 jndi 名称来获取 DataSource 并检查它以获取连接信息。
对于这种类型的事情,我通常只是使用调试器,设置一个断点,然后遍历变量,直到找到信息所在的位置;然后查看它是否公开可用,如果没有,请使用反射来获取它。但没有任何保证。
【讨论】:
如果您使用 JDBC,您始终可以获取连接及其元数据。如果您使用的是 Spring 事务管理器,您可以像这样得到它:
transactionManager.getDataSource().getConnection().getMetaData()
这显示tons of information 关于您的数据库及其连接,包括用户名。 persistence.xml 中有一些信息可能处理数据库连接池,这些信息通常不存储在 Hibernate 中的任何位置,而是存储在实际的连接池代码中。
您需要从 persistence.xml 文件中获取哪些信息?
【讨论】: