2011-12-22 64 views
1

我正在做Timory Perrett的Lift In Action,这本书对db连接有点困惑。scala lift postgresql的数据库连接

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

混乱的部分,是JNDI。我没有java背景,所以有点混乱,prop文件也很混乱。这有点类似配置文件或ini文件,但仍然有很多事情我不明白。

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

这是一个有点不同。我对PHP来说更熟悉PHP背景。

那有什么区别?两种不同的方法有什么优点吗?第二种方法也不检查连接是否建立,我该如何检查?或者是否有任何代码片段可以提供给我看看故障切换的最佳做法?

哦!负载鲨鱼模式用于确保只有一个数据库连接是正确的?

谢谢你的时间。

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

回答

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对它的工作方式有很好的说明,但基本上可以为运行模式(测试,临时,生产等),主机名和用户名的任意组合指定不同的属性。

现在,打破蒂姆·佩雷特代码:

  1. 检查是否JNDI连接可用。除非你运行一个应用服务器并设置它,否则它不会。没有什么大不了的。
  2. 如果没有JNDI,它使用Database对象来配置数据源。
  3. Database对象使用Lift的Props对象来加载与您所运行的系统最匹配的任何.props文件的值。如果您只提供default.props,则这些值将被使用。
  4. 如果没有属性文件,或者它不包含数据库配置密钥,那么openOr为使用an H2 database提供默认值。

Lift已经做了自己的连接管理,这通常意味着每个线程有不同的数据库连接。如果无法建立连接,您将从数据访问代码中获得SQLException