我喜欢在本地Tomcat安装上使用Hibernate测试我的Web应用程序,稍后将其部署到Glassfish服务器。
Tomcat的连接数据源如下所示:
<property name="connection.datasource">java:comp/env/jdbc/mydb</property>
Glassfish路径:
<property name="connection.datasource">jdbc/mydb</property>
是否可以合并这两个设置,以便我只能使用一个hibernate.cfg.xml来运行environemnt?
答案 0 :(得分:0)
更好的方法是使用两个(或更多)hibernate.cfg.xml配置文件,每个环境和/或数据库一个。
两个文件的配置文件的大部分内容都相同(尤其是映射文件的引用)。只有连接字符串,用户/密码或数据库驱动程序等部分不同(如有必要)。
然后,您将配置文件的路径和文件名作为应用程序的启动参数,并在Configuration.configure(<filename>)
中使用它。
优点是:
- 不同的连接字符串没有问题
- 用于测试和生产的不同密码没有问题
- 使用不同数据库的可能性(例如Oracle和MySQL)
- 如果表只在一个环境中更改,则可以轻松引用不同的映射文件
=&GT;所有这些都使用相同的Java代码来实现这两种环境。
答案 1 :(得分:0)
使用两个hibernate配置文件进行复制和粘贴并不是一个真正的问题。
如果您绝对只想拥有一个文件,则可以使用两个环境中的所有内容创建hibernate.cfg.xml,并包含仅包含连接字符串的第二个文件。
例如hibernate.cfg.xml中的这样:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" [
<!ENTITY database_connection SYSTEM "databaseConnection.xml">
]>
<hibernate-configuration>
<session-factory>
&database_connection;
<property name="show_sql">true</property>
<mapping resource="..."/>
...
<mapping resource="..."/>
</session-factory>
</hibernate-configuration>
然后您需要第二个文件databaseConnection.xml
,其中包含连接信息,并在读取配置时自动包含。这个文件有两个版本,一个用于Tomcat,一个用于Glassfish。如果更改映射,则只需在一个文件中执行,但在交付软件时必须注意第二个文件。
我个人认为,带有两个hibernate.cfg.xml文件的版本更容易,更灵活。
(顺便说一下,包含文件是一个xml功能,不是一个休眠功能。)