junit jndi_使用Spring创建用于JUnit测试的JNDI资源

junit jndi

直到最近,我还使用静态方法来设置内存数据库(HSQLDB)。 我在JUnit测试的setUp / tearDown中调用了这些方法。 当我使用Spring时,这对我来说总是有点不自然,并且所有内容都应在其应用程序上下文中运行。

2016-04-22-jndi-junit

创建一个简单的JNDI bean

在生产中使用JNDI时,我还必须为应用程序创建JNDI资源。 一个简单的使用Apache Commons DBCP的Spring Bean可以解决这个问题:

public class JndiBean {public JndiBean() {try {DriverAdapterCPDS cpds = new DriverAdapterCPDS();cpds.setDriver("org.hsqldb.jdbc.JDBCDriver");cpds.setUrl("jdbc:hsqldb:mem:testdb");cpds.setUser("SA");cpds.setPassword("");SharedPoolDataSource dataSource = new SharedPoolDataSource();dataSource.setConnectionPoolDataSource(cpds);dataSource.setMaxActive(10);dataSource.setMaxWait(50);SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();builder.bind("java:comp/env/jdbc/timeandbill", dataSource);builder.activate();} catch (NamingException | ClassNotFoundException ex) {ex.printStackTrace();}}
}

您不应该三思而后行地使用此基本配置,但是它对于单元测试非常有效。

首先,我创建了一个驱动程序适配器,其中包含连接数据库所需的一切。 它可以是MySQL,Postgres或您喜欢的其他任何东西。

然后,我创建一个SharedPoolDatasource。 由于测试通常按顺序运行,因此实际上不必保持大量连接。 即使不是这样,通常也将至少为每个测试类创建Spring上下文。 您不太可能从这里获得池的好处,但是我想坚持生产服务器通常会做的事情。

SimpleNamingContextBuilder最终将先前创建的数据源绑定到JNDI上下文。 如您所见,这是一件很简单的事情:只需将其绑定,然后激活即可完成。

将JNDI bean添加到上下文

下一步是将其添加到第二个applicationContext.xml中,该文件仅由JUnit测试加载。 我位于“单元测试”文件夹中,并且包含:

<bean id="jndi" class="de.grobmeier.tab.webapp.JndiBean" lazy-init="false" />

测试中的这些注释确保我加载了所有applicationContext文件:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath*:applicationContext.xml"})
public class TimeConverterTest {

我的生产applicationContext包含以下内容:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"><property name="jndiName" value="java:comp/env/jdbc/timeandbill"/><property name="resourceRef" value="true" />
</bean><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" />
</bean>

由于没有在JUnit级别运行的Java EE服务器。 而是手动创建了JNDI连接。 在生产中,不会加载JUnits applicationContext,并且Java EE容器提供JNDI资源。

旁注:我发现Mybatis依赖于Springs自动装配“ byType”功能。

翻译自: https://www.javacodegeeks.com/2016/11/create-jndi-resources-junit-testing-using-spring.html

junit jndi

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

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

相关文章

c语言程序经过编译以后生成的文件名的后缀为,c语言源文件经过编译后生成文件的后缀是什么...

c语言源文件经过编译后生成文件的后缀是什么c语言源文件经过编译后生成文件的后缀是“.obj”。C语言源程序经过编译程序编译之后&#xff0c;生成一个后缀为“.obj”的文件&#xff0c;最后由称为“连接程序”的软件&#xff0c;把此“.obj”文件与各种库函数连接在一起&#x…

通过PL/SQL developer工具访问远程的Oracle数据库_访问数据库_连接数据库_登录数据库

文章目录工具简介电脑没有安装 Oracle 数据库电脑安装了 Oracle 数据库工具简介 PL/SQL Developer 是 Oracle 数据库开发工具&#xff0c;PL/SQL Developer 功能很强大&#xff0c;可以做为集成调试器&#xff0c;有 SQL 窗口&#xff0c;命令窗口&#xff0c;对象浏览器和性能…

xgboost简单介绍_好文干货|全面理解项目中最主流的集成算法XGBoost 和 LightGBM

点击上方“智能与算法之路”&#xff0c;选择“星标”公众号第一时间获取价值内容本文主要介绍基于 Boosting 框架的主流集成算法&#xff0c;包括 XGBoost 和 LightGBM。送上完整的思维导图&#xff1a;XGBoostXGBoost 是大规模并行 boosting tree 的工具&#xff0c;它是目前…

本地 Windows 如何将 Web 工程部署到远程 Windows 主机上

文章目录第一步&#xff1a;先连接远程 Windows 主机&#xff1a;第二步&#xff1a;连接远程 Windows 主机后&#xff0c;把发布包复制到远程主机上并确定有关的目录第三步&#xff1a;删除远程主机的数据库中的旧数据第四步&#xff1a;创建新的用户和表空间第五步&#xff1…

r语言三维柱状图_R语言三维图的绘制

R语言在可视化方面的地位是毋庸置疑的&#xff0c;但是呢相对于MatalabR语言在三维图形的展示上存在一定的劣势。当然&#xff0c;作为大众的免费软件&#xff0c;指定不服&#xff0c;很多人为此也基于R语言开发了一些相应的三维图的绘制包&#xff0c;像rgl&#xff0c;gg3D&…

从事仪表专业学c语言有用吗,测控专业就业方向有哪些 就业前景比你想象中的好...

测控专业就业方向有哪些?这个专业的就业前景好不好?这些问题都是小伙伴们比较关心的问题&#xff0c;下面随小编一起来了解一下吧。主要就业方向1.智能仪器仪表方向&#xff0c;我觉得这个方向主要是从事仪器仪表&#xff0c;电子产品的软件&#xff0c;硬件研发&#xff0c;…

c语言 将url图片存到本地_python爬虫:爬取男生喜欢的图片

任务目标&#xff1a;1.抓取不同类型的图片2.编写一个GUI界面爬虫程序&#xff0c;打包成exe重新文件3.遇到的难点1.分析如何抓取不同类型的图片首先打开网站&#xff0c;可以看到有如下6个类型的菜单在这里插入图片描述点击不同菜单&#xff0c;发现URL显示如下大胸妹&#xf…

c语言编译后找不到exe,在VS 2015命令提示符中找不到c – rc.exe

我刚刚安装了Windows 10 Creators Update(版本10.0.15063).我安装了多个版本的Visual Studio(2012年,2013年,2015年和2017年).我几周前才安装了VS 2017.问题在“VS2015 x64本机命令提示符”中运行时,CMake(版本3.8.1)不再找到C/C编译器(在VS 2017命令提示符下运行时它可以正常工…

tomcat如何通过配置的方式部署web工程

Workspaces 下有很多工程文件&#xff0c;这个 Workspaces 是 Myeclipse 自动生成的&#xff0c;我们通过 Myeclipse 写的工程都在这个 Workspaces 文件夹下。 我们部署工程到服务器上&#xff0c;就是要每个 WEB 工程里面的 context 文件夹&#xff0c;这个文件夹可以放在 t…

python爬虫源码_Python—爬虫:王者荣耀全套皮肤【附源码】

怎么获取全套皮肤&#xff1f;用钱买&#xff0c;或者用爬虫爬取下来~虽然后者不能穿。这个案例稍微复杂一点&#xff0c;但是一个非常值得学习的项目。具体实现思路&#xff1a;分析网页源代码结构找到合适的入口穷举访问并解析爬取所有英雄所有皮肤图片代码思路/程序流程&…

警惕成教自考_不,保持警惕不会伤害Java。 关于Java许可的评论。

警惕成教自考所以。 Oracle希望通过Java赚钱。 然后&#xff0c;The Register发表了一篇非常对立的文章&#xff0c;上面有一个超级吸引人的标题。 根据他们的消息来源&#xff0c;“ Oracle正在大力加强对声称违反其许可证的Java客户的审计”。 当Twitter诗句对人们批评Oracle…

android colorstatelist_Android 样式系统 | 主题背景属性

在 Android 样式系统系列的前几篇文章中&#xff0c;我们介绍了主题背景与样式的区别&#xff0c;以及为什么说通过主题背景和公共主题背景属性来分解您要实现的内容是一个不错的主意&#xff0c;请点击链接回顾:Android 样式系统 | 主题背景和样式Android 样式系统 | 常见的主…

python二级考试可以用pycharm吗_学Python,Pycharm不能不知道怎么用

栏目介绍必会的Pycharm。我决定把去年写的Python文章整理一个专栏&#xff0c;垃圾的就直接删除&#xff0c;将多篇博文整理成一篇。 工欲善其事必先利其器&#xff0c;Pycharm 是最受欢迎的Python开发工具&#xff0c;它提供的功能非常强大&#xff0c;我尽量把自己用的都写写…

apache camel_Apache Camel Intellij IDEA插件的工作已开始

apache camel仅仅因为圣诞节并不意味着骆驼静止不动。 在23日晚上&#xff0c;我花了一些时间进行研究&#xff0c;并开始研究IDEA的Apache Camel插件的小原型。 它已经存在了我很长时间。 原因是Apache Camel为目录提供了有关工具的大量有用信息。 该目录包含有关每个Camel组…

Final Cut Pro X剪辑影片基本步骤

文章目录一、资源库、事件、项目之间的区别二、制作一个视频的步骤&#xff08;一&#xff09;创建资源库&#xff08;二&#xff09;创建事件(非必需)&#xff08;三&#xff09;导入资源&#xff08;四&#xff09;创建项目&#xff08;五&#xff09;进行剪辑&#xff08;六…

单例模式引发的内存泄漏:_资源泄漏:救援的命令模式

单例模式引发的内存泄漏:多年来&#xff0c; 使用Plumbr进行性能监控时&#xff0c;我遇到了数百个资源泄漏引起的性能问题。 在这篇文章中&#xff0c;我想描述一种最简单的方法来清理资源并避免该问题。 首先&#xff0c;我以电影播放器​​应用程序为例来描述问题。 这种应…

ant构建项目迁移到gradle_Gradle这么弱还跑来面腾讯?

点击上方“刘望舒”&#xff0c;选择“星标”多点在看&#xff0c;就是真爱作者: 厘米姑娘(腾讯开发妹子)| 来源 &#xff1a;公号 码个蛋https://www.jianshu.com/p/1274c1f1b6a4前言在使用Android Studio过程中没少被Gradle坑过&#xff0c;虽然网上有很多简单粗暴的解决方案…

java heroku_使用Spring Boot和Heroku在20分钟内完成Java的单点登录

java heroku建筑物身份管理&#xff0c;包括身份验证和授权&#xff1f; 尝试Stormpath&#xff01; 我们的REST API和强大的Java SDK支持可以消除您的安全风险&#xff0c;并且可以在几分钟内实现。 注册 &#xff0c;再也不会建立auth了&#xff01; 大规模更新 我最初为本文…

如何使用SSH客户端远程操作linux系统,并启动、关闭tomcat和查看后台日志

cd … 表示回退到上一级目录 ls 表示查看当前目录下的所有文件 我们的tomcat安装路径在usr\local\yzmis\下面找 例如你要关闭信誉质量考核系统所在的tomcat&#xff0c;你要进入test下去找到apache-tomcat-6.0.14 再进入bin目录下&#xff0c;然后执行[trserver100 bin]$ ./sh…

模块pdf2image.dll加载失败_Webpack 原理从前端模块化开始

当前主流 JS 模块化方案无模块化CommonJS 规范&#xff0c;nodejs 实现的规范AMD 规范&#xff0c;requirejs 实现的规范CMD 规范&#xff0c;seajs 实现的规范&#xff0c; seajs 与 requirejs 实现原理有很多相似的地方 u ES Modules&#xff0c;当前 js 标准模块化方案注意:…