始终在方法的开头和结尾处执行代码

蓝天

我正在使用以下代码连接到MongoDb:

   def insert() = {

    val mc = new com.mongodb.MongoClient("localhost", 27017);
    val db = mc.getDatabase("MyDb");

    //My insert code

    mc.close();

  }                                               //> insert: ()Unit

我有各种打开和关闭连接的方法。可以的线:

  val mc = new com.mongodb.MongoClient("localhost", 27017);
val db = mc.getDatabase("MyDb");
mc.close();

被提取,以便在方法的开始和结束时隐式调用它们。Scala隐式服务是否适合这种情况,还是需要反射?

迈克尔·扎亚克(Michael Zajac)

一种常见的模式是使用按名称调用方法,您可以在其中传递一个接受aDB并对其执行某些操作的函数按名称调用方法可以促进客户端等的创建,并在其中执行代码。

def withDB[A](block: DB => A): A = {
  val mc = new com.mongodb.MongoClient("localhost", 27017);
  val db = mc.getDatabase("MyDb");
  try block(db) finally mc.close()
}

并使用它:

def insert() = withDB { db =>
   // do something with `db`
}

但是,查看文档说明:

具有内部连接池的MongoDB客户端。对于大多数应用程序,您应该为整个JVM使用一个MongoClient实例。

假设这是您正在使用的版本,那么使上述方法看起来不是一个好主意。我绝对可以看到尝试执行此操作并打开太多连接的一些并发问题。

但是,您可以遵循相同的模式,将创建的连接填充到单个对象中。但是,当您的应用程序关闭时,您将需要管理客户端的关闭。

object Mongo {
  lazy val mc = new com.mongodb.MongoClient("localhost", 27017);
  lazy val db = mc.getDatabase("MyDb");

  def withDB[A](block: DB => A): A = block(db)

  def close(): Unit = mc.close()
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在歌曲的开头和结尾处淡入/淡出音频

来自分类Dev

Python numpy在列的开头和结尾处插入列

来自分类Dev

在每行的开头和结尾处添加文本

来自分类Dev

在段落的开头和结尾处的双箭头

来自分类Dev

R在列的开头和结尾处删除零

来自分类Dev

删除在 R 开头和结尾处包含句点的行

来自分类Dev

如何使用GCC在每个函数的开头/结尾处植入我自己的代码

来自分类Dev

如何在Flutter TextFormField的开头和结尾处缩进和缩进

来自分类Dev

在字符串的开头和结尾处连续删除数学运算符

来自分类Dev

将csv文件读入R,在每行的开头和结尾处都包含方括号

来自分类Dev

CCLabelTTF :: setString在字符串的开头和结尾处不接受空格

来自分类Dev

strsplit()的行为与字符串开头和结尾处的空格不同

来自分类Dev

在包含关键字的行的开头和结尾处插入标签

来自分类Dev

使用PyDub删除wave文件开头和结尾处的静音

来自分类Dev

如何确定在父元素的开头或结尾处是否存在文本?HTML DOM和JavaScript

来自分类Dev

选择名称开头和结尾处具有固定模式的列,以及可变的中间部分

来自分类Dev

如何确定在父元素的开头或结尾处是否存在文本?HTML DOM和JavaScript

来自分类Dev

strsplit()的行为与字符串开头和结尾处的空格不同

来自分类Dev

如何连接多个CSV文件,避免在开头和结尾处有些行

来自分类Dev

在第1行的开头和结尾处添加特定的字符串

来自分类Dev

Ansible - 映射属性时在 Key 的开头和结尾处“未定义”

来自分类Dev

始终执行代码和python脚本的结尾

来自分类Dev

在函数的开头或结尾处是否有requestAnimationFrame?

来自分类Dev

如何在下面的Java代码结尾处显示正确和错误的答案?

来自分类Dev

Angular http.get不喜欢开头和结尾处带有方括号的文本文件

来自分类Dev

正则表达式在匹配字符串的开头和结尾处用双引号替换双精度

来自分类Dev

如何使用正则表达式在javascript中字符串的开头和结尾处删除<br>?

来自分类Dev

在用户输入答案的开头和结尾处排除单词或字符的正则表达式

来自分类Dev

在读取文件的字符串的开头和结尾处追加一些字符串

Related 相关文章

  1. 1

    在歌曲的开头和结尾处淡入/淡出音频

  2. 2

    Python numpy在列的开头和结尾处插入列

  3. 3

    在每行的开头和结尾处添加文本

  4. 4

    在段落的开头和结尾处的双箭头

  5. 5

    R在列的开头和结尾处删除零

  6. 6

    删除在 R 开头和结尾处包含句点的行

  7. 7

    如何使用GCC在每个函数的开头/结尾处植入我自己的代码

  8. 8

    如何在Flutter TextFormField的开头和结尾处缩进和缩进

  9. 9

    在字符串的开头和结尾处连续删除数学运算符

  10. 10

    将csv文件读入R,在每行的开头和结尾处都包含方括号

  11. 11

    CCLabelTTF :: setString在字符串的开头和结尾处不接受空格

  12. 12

    strsplit()的行为与字符串开头和结尾处的空格不同

  13. 13

    在包含关键字的行的开头和结尾处插入标签

  14. 14

    使用PyDub删除wave文件开头和结尾处的静音

  15. 15

    如何确定在父元素的开头或结尾处是否存在文本?HTML DOM和JavaScript

  16. 16

    选择名称开头和结尾处具有固定模式的列,以及可变的中间部分

  17. 17

    如何确定在父元素的开头或结尾处是否存在文本?HTML DOM和JavaScript

  18. 18

    strsplit()的行为与字符串开头和结尾处的空格不同

  19. 19

    如何连接多个CSV文件,避免在开头和结尾处有些行

  20. 20

    在第1行的开头和结尾处添加特定的字符串

  21. 21

    Ansible - 映射属性时在 Key 的开头和结尾处“未定义”

  22. 22

    始终执行代码和python脚本的结尾

  23. 23

    在函数的开头或结尾处是否有requestAnimationFrame?

  24. 24

    如何在下面的Java代码结尾处显示正确和错误的答案?

  25. 25

    Angular http.get不喜欢开头和结尾处带有方括号的文本文件

  26. 26

    正则表达式在匹配字符串的开头和结尾处用双引号替换双精度

  27. 27

    如何使用正则表达式在javascript中字符串的开头和结尾处删除<br>?

  28. 28

    在用户输入答案的开头和结尾处排除单词或字符的正则表达式

  29. 29

    在读取文件的字符串的开头和结尾处追加一些字符串

热门标签

归档