spring peizhi JNDI_数据库

jndi

在Spring和Tomcat中设置JNDI数据库连接池非常容易。 Tomcat服务器文档提供了有关如何在Tomcat 5、6或7中设置连接池的足够信息。这里,我们将结合使用Tomcat 7和Spring框架在Tomcat服务器中创建连接池并在Spring中使用JNDI代码访问它们。 在上一篇文章中,我们 了解了如何在Spring中为不在Web服务器或应用程序服务器上运行且没有托管J2EE容器的 核心Java应用程序设置数据库连接池。 但是,如果您要开发Web应用程序,则最好使用服务器托管连接池并使用JNDI访问它们。 Spring配置将是通用的,并且仅基于Datasource的JNDI名称,因此它将在任何J2EE服务器(例如Glassfish , WebLogic , JBoss或WebSphere)上运行,直到JNDI名称相同为止。

顺便说一句,Tomcat是我最喜欢的Web服务器,由于它与Eclipse和Netbeans等IDE集成在一起,因此我在开发中经常使用它。 我将其用于所有测试和开发目的,许多公司甚至在生产中运行Tomcat来托管Java Web应用程序。

尽管要小心java.lang.OutOfMemoryError:tomcat中的PermGen空间,但是它很简单,快速且非常可靠,这可能会导致Java应用程序中的内存泄漏。 它通常是由于ThreadLocal变量和JDBC驱动程序而发生的,但是您可以通过了解更多信息来避免这种情况

如何在Tomcat和Spring中使用JNDI数据库连接池

为任何Java Web应用程序配置和运行JNDI数据源连接池,分三个步骤:

1)在服务器中配置数据源并创建JNDI名称。

2)配置web.xml

3)使用JNDI数据源配置Spring bean

4)在服务器库中包含JDBC驱动程序库,例如tomcat / lib

为了在J2EE Web服务器上创建JNDI数据源,您需要遵循服务器文档。 在Tomcat 6上,您可以简单地将以下XML放在context.xml以创建Tomcat管理的数据库连接池:

<<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/springDataSourceDemo">
<Resource name="jdbc/springeDataSource"
         auth="Container"
         type="javax.sql.DataSource"
         driverClassName="oracle.jdbc.driver.OracleDriver"
         url="jdbc:oracle:thin:@localhost:1521:SPRING_TEST"
         username="root"
         password="root"
         removeAbandoned="true"
         removeAbandonedTimeout="90"
         logAbandoned="true"
         maxActive="20"
         maxIdle="10"
         maxWait="-1"/>
</Context>

Resource元素将创建JNDI数据源,可以使用JNDI名称“ jdbc/springeDataSource ”进行引用。

Tomcat在内部使用DBCP和Commons池库来管理数据库连接池。 您可以检查tomcat/lib目录中的jar文件tomcat-dbcp.jar ,该文件负责在tomcat服务器内部创建数据库连接池。

1.通过

为了从Web应用程序访问任何服务器资源,您需要在web.xml中指定JNDI资源。

您可以使用以下XML在以下位置声明JNDI数据源:

<resource-ref>
        <description>Oracle Spring JNDI Datasource</description>
        <res-ref-name>jdbc/springDataSource</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
</resource-ref>

现在您的Web应用程序将看到在tomcat中创建的名称为jdbc/springDataSource JNDI数据源。

2.用于访问JNDI数据源的Spring配置:

此弹簧配置足够通用,可用于访问部署在任何J2EE或Java EE Server上的任何JNDI数据源。 它与Tomcat无关。 org.springframework.jndi.JndiObjectFactoryBean用于查找JNDI数据源并与javax.sql.DataSource绑定。

<bean id="springDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jdbc/springDataSource"/>
  <property name="lookupOnStartup" value="true"/>
  <property name="proxyInterface" value="javax.sql.DataSource"/>
</bean>

我在这里使用XML方式声明一个Spring bean,但是,如果您使用的是Spring 3.0或更高版本,则还可以使用Java Configuration和@Bean批注在Spring应用程序中声明数据源。

3. Tomcat Lib中的JDBC驱动程序文件

现在,最后一步是确保tomcat lib具有JDBC驱动程序jar文件。 我通常将JAR文件放在tomcat的lib目录中,但是您可以将其放在任何有意义的位置,并修改tomcat类路径以将驱动程序JAR包含到类路径中。

现在,使用此数据源的其余代码应保持不变。 您可以从上一篇文章如何在Spring框架中设置数据库连接池中获得Spring DAO源代码。

       <div> 
   <img src="https://s2.51cto.com/images/blog/202410/14081048_670c6188abd9d29814.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=" alt="" width="580" height="276">
</div>

PS –如果您想深入学习如何使用Spring MVC开发RESTful Web Service,建议您参加Eugen Paraschiv的REST with Spring认证课程。 使用Spring MVC学习REST的最佳课程之一。

翻译自: https://www.javacodegeeks.com/2018/04/how-to-setup-jndi-database-connection-pool-in-tomcat-spring-tutorial-example.html

jndi