【问题标题】:JAVA: how to load database url from web.xml?JAVA:如何从 web.xml 加载数据库 url?
【发布时间】:2010-06-03 08:52:10
【问题描述】:

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

谢谢

【问题讨论】:

  • 请问您为什么需要 JDBC URL 作为上下文参数?你想达到什么目的?如果你添加一些细节,你可能会得到更详细的答案。

标签: java servlets jpa web.xml


【解决方案1】:

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

【讨论】:

  • 是的,我正是想要这个 :) 谢谢 :)
  • 我一直在用createEntityManagerFactory(String persistenceUnitName),不知道这个方法的另一个版本。
  • +1 我完全忘记了这个方法(理论上,对于非托管环境)。
【解决方案2】:

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

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

是的,我知道 JNDI 不流行,但这很好用,它避免了操作也包含在战争中的 hte web.xml。

【讨论】:

  • 感谢您的回答。事实上,我必须从 web.xml 加载 JDBC URL。我不认为 JNDI 对我来说是一个好的解决方案。我需要一个非常简单的方法。这只是一个家庭作业:)
【解决方案3】:

无论您是否使用数据源,JPA 配置都在 persistence.xml 中,而不是在 web.xml 中。如果您想使用 JPA,请提供persistence.xml

【讨论】:

  • 切中要害!我有同样的答案,但我有点不确定,一直等到 Pascal Thivent 将发布确认答案;)
  • @user357255:如果是家庭作业,你应该使用 JPA 吗?正如我在对您的问题的评论中所写的那样,您或许应该明确您需要做什么。
  • quote1:“最好使用 JPA,但不是必须的”。 quote2:“数据库连接参数(URL)应该在 web.xml 中,作为 servlet 上下文参数”。所以我知道如何从 web.xml 中获取这些参数。现在,我想使用这个 URL 进行连接。
【解决方案4】:

在 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");

【讨论】:

  • 这个我知道,但是我不清楚如何使用这个参数制作EntityManagerFactory :(
【解决方案5】:

您可以使用 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 ) {

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 2010-09-25
    • 2012-12-13
    • 2011-01-19
    • 1970-01-01
    相关资源
    最近更新 更多