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

在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10任务栏透明+变窄+免安装

透明设置 在HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced中新建DWORD32位值TaskbarAcrylicOpacity&#xff0c;设置数值为0 重启资源管理器explorer.exe即可 变窄 下载7Taskbar软件7tt_setup.exe&#xff0c;直接解压&#xff0c;对于本…

java vm_Java VM –提防YoungGen空间

java vm正如您从我们以前的面向性能的文章中可能已经看到的那样&#xff0c;运行良好的JVM是实现最佳应用程序性能和稳定性的最重要目标之一。 这样的健康评估通常仅关注主要收集的频率&#xff08;避免&#xff09;或检测内存泄漏的存在。 年轻一代空间或短寿命物体的大小和足…

Java生产监控的阴暗面

自动化的工作流程是在敏捷环境中交付高质量产品的新金标准。 不幸的是&#xff0c;不断变化会带来不断的风险。 输入“可观察性”&#xff0c;这是一种度量&#xff0c;可以从系统的外部输出中推断出系统的内部状态。 知道应用程序如何在生产中运行的能力。 在本节中&#xff…

MATLAB库函数upfirdn(分数倍采样率变换)的C语言实现【姊妹篇2纯C语言实现】

upfirdn原理 yout = upfirdn(xin,h,p,q) upfirdn的功能在MATLAB官方帮助文档中说得很清楚 通过插零实现 p p p倍上采样对上采样之后的信号用给定的 h h h(通常为低通滤波器)进行滤波对滤波结果进行

adf4350配置_配置MySQL以进行ADF开发

adf4350配置大家好。 今天&#xff0c;我将向您展示如何为Oracle ADF开发配置MySQL数据库。 恕我直言&#xff0c;当您将ADF与其他数据库而不是Oracle DB一起使用时&#xff0c;您将无法使用Oracle ADF的全部功能&#xff0c;有时您会发现自己在寻找解决方法&#xff0c;以实现…

模拟调频信号FM解调的matlab和C语言实现【姊妹篇2纯C语言实现】

本文所需的FM已调信号、原始音频、包络检波法解调后的音频、差分相位法解调后的音频,可通过以下链接进行下载。其中,FM已调信号文件较大共有两百多兆,故截取其部分上传,若有需要完整信号的请留言! FM调制解调音频文件.rar 已调信号:采样率为 F s = 5 m H z Fs=5mHz Fs=

如何在Java中使用重复项查找整数数组中的K个缺失数字?

自从我讨论任何编码或算法面试问题以来已经有很长时间了&#xff0c;因此我想重新考虑一种最流行的基于数组的编码问题&#xff0c;即在给定数组中查找缺失的数字。 在进行编程工作面试之前&#xff0c;您可能已经听说过或看到过此问题&#xff0c;但是面试官通常会使用许多不同…

【自适应盲均衡12】判决引导(DD)+判决反馈(DFE)+双模式切换的盲均衡算法在双绞线基带通信中的应用MATLAB仿真(采用三电平PAM信号模型)

引言 为克服数字基带信号在通过非屏蔽五类双绞线时产生的严重码间干扰( ISI) ,常采用自适应均衡技术来减小码间干扰,大大降低接收端信号的误码率。最小均方误差( LMS) 算法能有效降低码间干扰,但需要训练序列,因此影响传输效率。基于判决引导的最小均方误差( DDLMS) 算法不…

基于同步压缩小波变换(Synchrosqueezed wavelet transforms)的时频分析的MATLAB实现(不使用内置函数wsst)

引言 同步压缩小波变换(Synchrosqueezed wavelet transforms, SST)采用了经验模态分解的设计思路,结合小波变换和reallocation theory构建而成,有明确的数学定义和推导。 EMD算法是一种旨在将它们分解成构建块函数的技术,这些构建块函数是(合理地)少量分量的叠加,这些分量…

垃圾收集算法,垃圾收集器_您正在使用什么垃圾收集器?

垃圾收集算法,垃圾收集器我们的研究实验室正全速前进。 随着最近的资本注入 &#xff0c;我们只能保证我们不断创新的步伐只会加快。 我们进行的部分研究与GC优化有关。 在处理这个有趣的领域中的问题时&#xff0c;我们认为可以分享一些有关GC算法使用的见解。 为此&#xff…

与时俱进:在JAX-RS API中采用OpenAPI v3.0.0

看到时间流逝真是太恐怖了&#xff01; OpenAPI规范3.0.0是对Swagger规范的重大修改&#xff0c;大部分已于一年前发布&#xff0c;但是工具赶上了一段时间。 但是&#xff0c;随着Swagger Core 2.0.0的最新正式发布&#xff0c;事情肯定会加速。 为了证明这一点&#xff0c;著…

Cpp类虚成员函数指针的用法

普通类成员函数指针 先定义一个公鸡类Cock&#xff0c;只有一个函数Shout&#xff0c;功能是输出一个字符串。 接着定义函数指针类型PFN_Shout。 main函数中代码PFN_Shout pfn_Shout &Cock::Shout;和void (Cock:: * pfn_Shout)() &Cock::Shout;的功能相同&#xf…

通过引入switch表达式来增强Java switch语句

去年12月下旬&#xff0c;我发布了“ Switch Expressions Coming Java&#xff1f; 从那时起&#xff0c;进行了广泛的讨论&#xff0c;表达了意见分歧&#xff0c;现在就Java的switch表达式的未来达成了共识。 我曾尝试在12月的博客文章中评论与switch表达式有关的一些主要发展…

jclouds_jclouds的命令行界面

jclouds序幕 我使用和为jclouds贡献了一年多的时间。 到目前为止&#xff0c;我已经在很多领域广泛使用了它&#xff0c;尤其是在Fuse生态系统中 。 它的强大之处在于它缺少一件事&#xff0c;该工具可用于管理jclouds也提供访问权限的任何云提供商。 类似于EC2命令之类的工具&…

用于从文件读取/写入字符串的新JDK 11文件方法

我之前的文章主要关注可能会添加到JDK 11中的Files.isSameContent()方法。 JDK-8201276 [“&#xff08;fs&#xff09;向文件添加方法以从文件读取字符串或向文件写入字符串”]提到了此新方法&#xff0c;并重点介绍了本文的主题&#xff1a; readString(Path) readString(P…

【数字信号处理】离散傅里叶级数(DFS)

周期信号的DFS 周期信号一定 不存在 离散傅里叶变换,通过引入冲激序列,可以进行表示,使得数学运算更加严谨;但一定存在傅里叶级数! 时域周期==>频域离散 时域离散==>频域周期 时域又离散又周期==>频域又周期又离散 联系序列的傅里叶变换DFT理解即可,只不过复指…

java对响应数据做封装_1000种对Java的响应没有死

java对响应数据做封装当一篇评论发表1000条评论时&#xff0c;值得考虑一下。 上周我的社论“ 如果Java即将死&#xff0c;它肯定看起来非常健康 ”在各个开发人员社区中都感到不安 。 在Reddit&#xff0c;Hacker News和Slashdot之间&#xff0c;它收到了1000多个评论。 奇怪…

了解自定义对象创建:JSON绑定概述系列

让我们看一下JSON绑定如何处理自定义对象的创建。 本系列的下一篇文章将介绍如何使用适配器自定义JSON-B。 JSON-B期望所有类都具有一个公共的无参数构造函数 &#xff0c;该构造函数在反序列化过程中用于实例化目标类。 创建实例后&#xff0c;可通过调用适当的setter方法或…

【数字信号处理】应用FFT计算线性卷积

线性卷积的运算量 DFT的应用方向 一是计算卷积,二是频谱分析,该博客主要讨论前者。通常,信号过系统需要计算卷积,假设 h ( n ) h(n) h(n)的长度为 N N

锁具行业电子工程师岗位职责_赏金猎人招募电子产品开发工程师产品结构工程师...

“赏金猎人”专栏6期来啦&#xff01;这个专栏&#xff0c;可以让产业需求被更广大的社区看见让社区更多有技能、有解决方案的小伙伴参与进来最终促进科技在传统产业中的应用落地专栏里面发布的猎人需求只要你觉得具备欢迎通过businesschaihuo.org跟我们取得联系今天要发布的是…