【问题标题】:How to configure DB connection in a Servlet based JPA application如何在基于 Servlet 的 JPA 应用程序中配置数据库连接
【发布时间】:2011-02-28 04:28:14
【问题描述】:

默认情况下,JPA 应用程序的数据库连接在 META-INF/persistence.xml 中配置,当应用程序未部署到完整的 Java EE 应用程序服务器时。在我看来,将这种特定于环境的配置放入 .war 文件中的文件不是很优雅。如何更灵活地配置基于 Servlet 的 JPA 应用程序的数据库连接(=在 .war 文件之外)?

【问题讨论】:

    标签: java database deployment jpa jakarta-ee


    【解决方案1】:

    在persistence.xml 中放置一个JNDI 查找名称,而不是原始连接参数。这会将实际的连接信息外部化,以便您可以在它所属的应用服务器中设置它。

    另一种方法可能是将连接参数放入数据库中。

    【讨论】:

      【解决方案2】:

      不确定它是否适用于您的提供商,这是我使用的,

      http://wiki.eclipse.org/EclipseLink/Examples/JPA/Tomcat_Web_Tutorial#JNDI_Datasource_Setup

      【讨论】:

        【解决方案3】:

        在 Servlet 容器中,还可以使用 数据源 和非 JTA (RESOURCE_LOCAL) persistence.xml。在 non-jta-data-source 元素中声明您的数据源:

        <?xml version="1.0" encoding="UTF-8"?>
        <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
         <persistence-unit name="myPU" transaction-type="RESOURCE_LOCAL">
           <non-jta-data-source>java:comp/env/ds/OracleDS</non-jta-data-source>
           <properties/>
         </persistence-unit>
        

        【讨论】:

          【解决方案4】:

          您没有将环境特定的东西放在persistence.xml 中。 有两个间接级别 1) 在您的 persistence.xml 中,您将拥有类似 ...

          <persistence xmlns="http://java.sun.com/xml/ns/persistence"
                       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                       xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
                       version="2.0">
             <persistence-unit name="sample">
                <jta-data-source>java:comp/env/jdbc/DefaultDS</jta-data-source>
                <properties>
                   <property name="hibernate.dialect" value="..."/>
                   <property name="hibernate.hbm2ddl.auto" value="..."/>
                </properties>
             </persistence-unit>
          </persistence>
          

          假设您使用的是 Tomcat,那么您将在 Tomcat 中定义数据源,这就是您实际进行数据源配置的地方。

          2) 在您的 CONTEXT.XML 中输入以下代码...

          <?xml version="1.0" encoding="UTF-8"?>
          
          <Context>
          
            <Resource name="jdbc/DefaultDS" auth="Container"
                      type="javax.sql.DataSource" username="wally" password="wally"
                      driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
                      url="jdbc:sqlserver://localhost;DatabaseName=mytest;SelectMethod=cursor;"
                      maxActive="8" 
                      />
          
          </Context>
          

          【讨论】:

            猜你喜欢
            • 2016-06-18
            • 1970-01-01
            • 1970-01-01
            • 2018-09-11
            相关资源
            最近更新 更多