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

资源元素将创建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源代码。

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

如何在Tomcat中设置JNDI数据库连接池-Spring教程示例相关推荐

  1. tomcat中配置jndi数据源以便spring获取

    [0]README 0)intro to jndi, plase visit intro to jndi: 1)本文译自 Configuring Spring MVC JdbcTemplate wit ...

  2. Tomcat中配置MySQL数据库连接池

    Web开发中与数据库的连接是必不可少的,而数据库连接池技术很好的优化了动态页与数据库的连接,相比单个连接数据库连接池节省了很大的资源.用一个通俗的比喻:如果一个人洗澡需花一桶水,那一百个人就要花一百桶 ...

  3. tomcat7.0.42如何设置mysql数据库连接池

    转载自   tomcat7.0.42如何设置mysql数据库连接池 如何在tomcat7.0.42中设置mysql数据库连接池????eclipse如何绑定tomcat??按网上教程总不成功!怎么办 ...

  4. 如何在 Java 应用程序中设置 HicariCP 连接池

    在本教程中,我们将介绍 HikariCP 并展示如何在 Java 应用程序中设置 HicariCP 连接池.在我们的应用程序中,我们向 MySQL 数据库发出请求. HikariCP是可靠的高性能 J ...

  5. java如何使显示字符下标_Java如何在 Word 中设置上、下标

    上标是指比同一行中其他文字稍高的文字,而下标是指比同一行中其他文字稍低的文字.在生活中,我们常见的平方米.立方米等符号以及化学中的各种元素符号,都是利用上.下标来表示的.本文将介绍通过Free Spi ...

  6. 如何在Postfix中设置邮件转发

    如何在Postfix中设置邮件转发 2016年1月5日 Mail服务 Postfix 是广泛使用的邮件传输代理(MTA)服务器,可用于发送,接收和通过网络发送的电子邮件转发.本教程将帮助您配置Post ...

  7. 如何在 CSS 中设置组件在浏览器屏幕水平垂直居中

    如何在 CSS 中设置组件在浏览器屏幕水平垂直居中   在 CSS 中设置组件在浏览器屏幕水平垂直居中可分解为两个问题,一是设置组件在其父组件的水平垂直居中,二是让其父组件铺满整个屏幕.   对于让最 ...

  8. 计算机excel行高在哪里,如何在Excel2016中设置改行高和列宽?

    相信大家会发现excel2016默认的行号和列宽有的时候会不符合自己的要求,那如何在Excel2016中设置改行高和列宽?下面感兴趣的小伙伴就和小编一起来学习一下具体的方法吧! Excel2016设置 ...

  9. android input鼠标坐标,android - 如何在EditText中设置光标位置?

    android - 如何在EditText中设置光标位置? 有两个EditText,在加载页面时,第一个EditText中设置了一个文本,所以现在光标将在EditText的起始位置,我想在第二个Edi ...

最新文章

  1. js校验复选框(多选按钮)是否被选中的方法
  2. JavaScript系列-----对象基于哈希存储(Key,Value之Key篇) (1)
  3. Nginx server之Nginx作为反向代理服务器
  4. 说一下自己对于 Linux 哲学的理解
  5. 矩阵转置(信息学奥赛一本通-T1126)
  6. js 中的属性以数字开头的属性和取值
  7. Qt窗口部件——QWidget
  8. AllenNLP入门笔记(一)
  9. 乌合之众-大众心理研究(六)
  10. java学习php(一)基础知识
  11. 苹果公司不给iPhone配大电池的原因
  12. 小米路由器4A千兆版 直刷 openwrt
  13. 洛谷P4383 [八省联考2018]林克卡特树lct(DP凸优化/wqs二分)
  14. matlab建立三层蒸发模型,水文模型三层蒸发模型的问题(初学者)
  15. 【python 时间戳】python获取13位时间戳以及时间戳转换
  16. 编译原理——语法制导翻译并产生中间代码(while,复合语句和过程调用语句的翻译)
  17. 键盘按键VK键值列表及宏定义
  18. html制作宣传页面
  19. 从前慢-谷粒商城篇章1
  20. mysql 16进制字符串转中文_mysql如何把16进制转换成中文字符显示

热门文章

  1. 【枚举】连续自然数和(jzoj 2102)
  2. 经典题:poj2104-区间第k小 整体二分学习
  3. SpringCloud Ribbon(二)之自定义负载均衡策略IRule
  4. Java编程:Java的反射机制中的 getComponentType() 方法
  5. Oracle入门(十二C)之表修改
  6. layui结合ajax实现下拉菜单联动效果
  7. 2019蓝桥杯省赛---java---B---3(数列求值)
  8. 集合中获取元素为什么要进行强制类型转换
  9. 强行覆盖远程的gitlab 出错
  10. Android增加自定义监听事件