用于postgresql的Scala Lift数据库连接

时间:2011-12-22 22:02:26

标签: scala lift

我正在做Timothy Perrett的Lift In Action,这本书对数据库连接有点混乱。

这是链接: https://github.com/timperrett/lift-in-action/blob/master/chapter-3/src/main/scala/bootstrap/liftweb/Boot.scala

令人困惑的部分是JNDI。我没有java背景,所以它有点令人困惑,道具文件也令人困惑。它有点类似于配置文件或ini文件,但仍然有很多我不明白的事情。

我找到了另一个教程: http://exploring.liftweb.net/master/index-8.html @ 8.1.2设置数据库连接

这有点不同。来自PHP背景的我更熟悉。

那有什么区别?这两种方法之间有什么优势吗?并且第二种方法不检查连接是否未建立,如何检查?或者,您是否可以提供任何代码片段来向我展示故障转移的最佳实践?

哦! load shark模式用于确保只使用一个db连接?

感谢您的时间。

编辑: 我相信连接检查是否已建立在DBVendor对象中newConnection上的数据库对象中。我对么?

1 个答案:

答案 0 :(得分:4)

TL;博士

将您的数据库配置放在./src/main/resources/default.props中,格式为:

db.class=org.postgresql.Driver
db.url=jdbc:postgresql:[//host[:port]]/database
db.user=user
db.pass=password

当然,您需要为数据库提供正确的值。

长篇故事

如果JNDI令人困惑,您现在可以忽略它。如果您尝试将生产应用程序配置为在应用程序服务器上运行,那么它是part of Java EE非常有用,但不是必需的。

Properties是Java中用于处理配置的古老方法。属性文件(通常名为.props.properties)只是名称/值对的列表。

Lift提供了一个Props对象,可以方便地为不同的环境提供不同的属性文件。 The wiki对其工作方式有一个很好的说明,但基本上你可以为运行模式(测试,登台,生产等),主机名和用户名的任意组合指定不同的属性。

现在,打破Tim Perrett的代码:

  1. 检查JNDI连接是否可用。除非您运行应用服务器并进行设置,否则它不会。如果不是,那就没什么大不了的了。
  2. 如果没有JNDI,则使用Database对象配置数据源。
  3. Database对象使用Lift的Props对象从最适合您正在运行的系统的.props文件中加载值。如果您只提供default.props,则这些是将要使用的值。
  4. 如果没有属性文件,或者它不包含数据库配置密钥,则openOr提供使用an H2 database的默认值。
  5. Lift已经完成了自己的连接管理,这通常意味着每个线程有不同的数据库连接。如果无法建立连接,您将从数据访问代码中获取SQLException