我正在使用持久性 API,并希望从 web.xml 加载 jdbc URL。URL 应该是 servlet 的上下文参数。我找不到不使用 persistence.xml 来构造 EntityManagerFactory 的方法。也许我应该在 servlet 中创建 PersistenceUnit 并设置一些参数?你能给我一些简短的例子吗?
谢谢
你可以使用createEntityManagerFactory(String persistenceUnitName, Map properties)
类的方法javax.persistence.Persistence
。并在地图中插入所有参数
无论您是否使用数据源,JPA 配置都persistence.xml
位于web.xml
. 如果要使用 JPA,请提供persistence.xml
.
我个人发现它是使用 JNDI 在 servlet 容器中定义数据源并从 persistence.xml 中引用的最简洁的方法。
这也解决了从 test-uat-prod 迁移时的一个配置问题,因为我可以在机器上使用相同的数据源名称。
是的,我知道 JNDI 不流行,但这很好用,并且它避免了操作也包含在战争中的 hte web.xml。
您可以使用 env-entry 从 web.xml 中检索任何值
<env-entry>
<env-entry-name>dbUrl</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>jdbc:url:goes:here</env-entry-value>
</env-entry>
在java中
try {
Context ctx = new InitialContext();
String dbUrl= (String) ctx.lookup("java:comp/env/dbUrl");
//... create your connection
} catch (Exception e ) {
}
在 web.xml 中定义一个指向数据库 url 的 init-param。例如,对于 MySQL,它将是这样的:
<init-param>
<param-name>DB_URL</param-name>
<param-value>jdbc:mysql:///MY_DB</param-value>
</init-param>
然后在您的 Web 应用程序中(在 Servlet 中)使用以下内容获取此值:
String myDbUrl = getServletConfig().getInitParameter("DB_URL");
在 JSP 文件中,您可以通过以下方式获取值:
String myDbUrl = config.getInitParameter("DB_URL");