JAVA:如何从web.xml加载数据库URL?

时间:2010-06-03 08:52:11

标签: java servlets jpa web.xml

我正在使用持久性API,并希望从web.xml加载jdbc URL。 URL应该是servlet的上下文参数。我找不到如何使用persistence.xml构造EntityManagerFactory。可能是我应该在servlet中创建PersistenceUnit并设置一些参数?你能给我一些简短的例子吗?

谢谢

5 个答案:

答案 0 :(得分:3)

您可以使用类createEntityManagerFactory(String persistenceUnitName, Map properties)的方法javax.persistence.Persistence。并在地图中插入所有参数

答案 1 :(得分:1)

我个人认为这是在servlet容器中使用JNDI定义数据源的最简洁方法,并从persistence.xml中引用它。

这也解决了从test-uat-p​​rod迁移时的一个配置问题,因为我可以在机器上使用相同的数据源名称。

是的,我知道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");