Java 8:Lambda表达式与自动关闭

如果您通过Neo4j的Java API和Java 6使用了Neo4j的早期版本,则可能具有与以下类似的代码,以确保在事务中进行写操作:

public class StylesOfTx
{public static void main( String[] args ) throws IOException{String path = "/tmp/tx-style-test";FileUtils.deleteRecursively(new File(path));GraphDatabaseService db = new GraphDatabaseFactory().newEmbeddedDatabase( path );Transaction tx = db.beginTx();try {db.createNode();tx.success();} finally {tx.close();}}
}

在Neo4j 2.0中,Transaction开始扩展AutoCloseable ,这意味着您可以使用“尝试使用资源”,并且在块完成时将自动调用“ close”方法:

public class StylesOfTx
{public static void main( String[] args ) throws IOException{String path = "/tmp/tx-style-test";FileUtils.deleteRecursively(new File(path));GraphDatabaseService db = new GraphDatabaseFactory().newEmbeddedDatabase( path );try ( Transaction tx = db.beginTx() ){Node node = db.createNode();tx.success();}}
}

尽管人们在不使用此语法的情况下仍可以在应用程序中挂起事务,但这仍然可以很好地工作,尽管仍然可以允许使用旧样式。

在Venkat Subramaniam的Java 8书中,他提出了一种替代方法,其中我们使用基于lambda的方法:

public class StylesOfTx
{public static void main( String[] args ) throws IOException{String path = "/tmp/tx-style-test";FileUtils.deleteRecursively(new File(path));GraphDatabaseService db = new GraphDatabaseFactory().newEmbeddedDatabase( path );Db.withinTransaction(db, neo4jDb -> {Node node = neo4jDb.createNode();});}static class Db {public static void withinTransaction(GraphDatabaseService db, Consumer<GraphDatabaseService> fn) {try ( Transaction tx = db.beginTx() ){fn.accept(db);tx.success();}}}
}

实际上,“ withinTransaction”函数将在GraphDatabaseService或类似数据库上运行,而不是在该Db类上,但是对于此示例,将其放置在该函数上更容易。

这种风格的一个缺点是,您没有对处理失败案例的事务有明确的控制权–假设如果未调用'tx.success()',则事务失败并将其回滚。 我不确定到底有多少用例真正需要这种细粒度的控制。

Brian Hurt将此称为“ 中间模式的漏洞 ”,我想一旦Java 8发布并得到更广泛的使用,我们将开始看到更多类似的代码。

参考: Java 8:Lambda表达式与Auto Closeable可以从Mark Needham博客博客上的JCG合作伙伴 Mark Needham获得。

翻译自: https://www.javacodegeeks.com/2014/03/java-8-lambda-expressions-vs-auto-closeable.html

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

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

相关文章

vue之computed和watch

计算属性 computed 侦听器or观察者 watch 一直以来对computed和watch一知半解&#xff0c;用的时候就迷迷糊糊的&#xff0c;今天仔细看了看文档&#xff0c;突然茅塞顿开&#xff0c;原来就是这么简单啊&#xff1a; computed&#xff0c;通过别人改变自己watch&#xff0c;…

python实现简单的百度翻译

这段时间&#xff0c;一直在学python,想找点东西实现一下&#xff0c;练手&#xff0c;所以我想通过python代码来实现翻译&#xff0c;话不多说&#xff0c;看吧&#xff01; 以chrome为例 1 打开百度翻译 https://fanyi.baidu.com 2 找到请求的url地址 https://fanyi.baidu.…

php不会写 能看懂,人人都能看懂的全栈开发教程——PHP

既然我们是要实现从数据库里读取任务列表这个需求&#xff0c;那么首先我们就得知道如何通过编程的方式从数据库里把数据读出来。这里我们就选 PHP 作为我们的编程语言来实现我们的想法。为什么是 PHP 呢&#xff1f;主要有以下两个原因&#xff1a;PHP 比较简单&#xff0c;入…

与詹金斯一起连续交付Heroku

如果您安装了Jenkins Git插件&#xff0c;那么利用Jenkins并针对Heroku的连续交付管道的设置就非常简单。 通过此管道&#xff0c;对特定Git分支的更改将导致Heroku部署。 为了使此部署过程正常运行&#xff0c;您应该至少使用两个Git分支&#xff0c;因为您希望有一个针对自动…

Goland软件使用教程(二)

Goland软件使用教程&#xff08;二&#xff09;一、编码辅助功能 1. 智能补全 IDE通过自动补全语句来帮助您来编写代码。快捷键“Ctrlshift空格”将会给你一个在当前上下文中最相关符号的列表&#xff0c;当您选择一个建议时&#xff0c;它会相应的将有关包导入到你的当前…

Vue style里面使用@import引入外部css, 作用域是全局的解决方案

问题描述 使用import引入外部css&#xff0c;作用域却是全局的 <template></template><script>export default {name: "user"}; </script><!-- Add "scoped" attribute to limit CSS to this component only --> <styl…

java输出减法表,Calendarjava时间加减法和格式化输出

Calendar calendar Calendar.getInstance();//减三天calendar.add(5, -3);//将Calendar类型转换成Date类型Date tasktimecalendar.getTime();//设置日期输出的格式//六天calendar.add(5, 6);Date tasktime2calendar.getTime();SimpleDateFormat dfnew SimpleDateFormat("…

集合对象根据某个字段首字母排序

import java.text.Collator; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Locale;/*** 排序后的对象集合* param list* return*/public Li…

Storm Trident拓扑中的错误处理

这篇文章总结了我在设计Storm Trident拓扑时当前的错误处理方法。 我在这里关注代码设计&#xff0c;而不是监督或冗余之类的部署良好实践。 由于Storm的实时流性质&#xff0c;当面对大多数错误时&#xff0c;我们最终将不得不移至下一个数据。 在这种情况下&#xff0c;错误…

vue路由知识整理

vue路由知识整理 对于单页应用,官方提供了vue-router进行路由跳转的处理.我们已经可以通过组合组件来组成应用程序&#xff0c;当你要把 vue-router 添加进来&#xff0c;我们需要做的是&#xff0c;将组件(components)映射到路由(routes)&#xff0c;然后告诉 vue-router 在哪…

ATS日志说明

ATS日志说明 转&#xff1a;http://www.safecdn.cn/在ATS日志中我们经常遇到形形色色的缓存结果码&#xff0c;为了更清晰地认识它们&#xff0c;相关资料整理到这里&#xff1a;TCP_HIT请求对象的一份合法拷贝被缓存&#xff0c;ATS将发送该对象给clientTCP_MISS请求对象未缓存…

leetcode 134. 加油站(Gas Station)

目录 题目描述&#xff1a;示例 1:示例 2:解法&#xff1a;题目描述&#xff1a; 在一条环路上有 N 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的…

在JUnit中测试预期的异常

单元测试用于验证一段代码是否按照开发人员的预期运行。 有时&#xff0c;这意味着检查代码是否也会引发预期的异常。 JUnit是Java单元测试的标准&#xff0c;并提供了几种验证抛出异常的机制。 本文探讨了这些选项及其相对优点。 以下面的简单代码段为例。 除了编写测试以确保…

php session 效率,大量php session临时文件带来的服务器效率问题

早上流量有点大&#xff0c;网站出口流量大概5M左右&#xff0c;访问质量却不太好&#xff0c;Web响应比较慢&#xff0c;切系统负载很高。检 查了下各web节点&#xff0c;所有web服务器的httpd线程均达到满负荷&#xff0c;很奇怪。因为所有web节点都通过nfs来共享session目录…

安卓第三次作业

<?xml version"1.0" encoding"utf-8"?> <uses-sdkandroid:minSdkVersion"8"android:targetSdkVersion"18" /> <uses-permission android:name"android.permission.RECORD_AUDIO" /> <uses-permissio…

[vue插件]基于vue2.x的电商图片放大镜插件

最近在撸一个电商网站&#xff0c;有一个需求是要像淘宝商品详情页那样&#xff0c;鼠标放在主图上&#xff0c;显示图片放大镜效果&#xff0c;找了一下貌似没有什么合适的vue插件&#xff0c;于是自己撸了一个&#xff0c;分享一下。小白第一次分享&#xff0c;各位大神莫见笑…

洛谷 P1968 美元汇率

传送门 我在下面哦~~ Im here 思路 这是一道比较简单的DP题 美元可由马克转化得到&#xff0c;马克可由美元转化得到&#xff0c;最后要求最大的美元值 我们可以用f数组来记录最大能达到多少马克和多少美元。 定义一个\(f[N][3]\)的数组&#xff0c;第一维表示到达了第i天 \(f[…

玩JerseyTest(Jersey 2.5.1和DI)

我将尝试解释一个简单的REST示例。 这个想法是建立一个基本的架构来开始使用Jersey。 当我开始使用某些框架时&#xff0c;通常会开发一个快速失败的测试环境&#xff0c;这就是我要做的。 下一个示例具有以下功能&#xff1a; 泽西岛2.5.1 依赖注入 用于测试的JUnit 类&a…

MySQL之视图、触发器、事务、存储过程、函数

一. 视图 视图是一个虚拟表&#xff08;非真实存在&#xff09;&#xff0c;是跑到内存中的表&#xff0c;真实表是硬盘上的表&#xff0c;怎么就得到了虚拟表&#xff0c;就是你查询的结果&#xff0c;只不过之前我们查询出来的虚拟表&#xff0c;从内存中取出来显示在屏幕上…

php送数据找不到表,php – 数据源默认值中找不到的模型表

我正在创建一个cakephp 2.x应用程序.在开发过程中途,我突然发现自己有一个“找不到表”的错误.Missing Database TableError: Table blocked for model Parental was not found in datasource default.Notice: If you want to customize this error message, create project\Vi…