我正在使用持久性API,并希望从web.xml加载jdbc URL。 URL应该是servlet的上下文参数。我找不到如何使用persistence.xml构造EntityManagerFactory。可能是我应该在servlet中创建PersistenceUnit并设置一些参数?你能给我一些简短的例子吗?
谢谢
答案 0 :(得分:3)
您可以使用类createEntityManagerFactory(String persistenceUnitName, Map properties)
的方法javax.persistence.Persistence
。并在地图中插入所有参数
答案 1 :(得分:1)
我个人认为这是在servlet容器中使用JNDI定义数据源的最简洁方法,并从persistence.xml中引用它。
这也解决了从test-uat-prod迁移时的一个配置问题,因为我可以在机器上使用相同的数据源名称。
是的,我知道JNDI不受欢迎,但这很好用,它避免了操纵hte web.xml,这也包含在战争中。
答案 2 :(得分:1)
无论您是否使用数据源,JPA配置都在persistence.xml
,而不在web.xml
。如果您想使用JPA,请提供persistence.xml
。
答案 3 :(得分:0)
您可以使用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 ) {
}
答案 4 :(得分:0)
在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");