2011-02-17 77 views
3

我正在使用Scala与Lift的新Web应用程序。我想让它可重用,以便其他人可以根据自己的需要将它安装在自己的服务器上。我来自PHP背景,通常的做法是创建一个安装表单,询问数据库连接的详细信息。该信息存储在配置文件中,供PHP应用程序的其余部分用于连接数据库。这对用户来说非常方便,因为所有内容都包含在存储PHP文件的目录中。他们可以自由定义其他一切。我的Java/Scala背景都是企业工作,其中应用程序仅用于在我们为其设置的数据库上运行。这并不意味着要安装在别人的网络服务器或不同的数据库上。斯卡拉/电梯数据库连接

所以我的问题是这是如何通常为Java/Scala世界完成?如果有开源应用程序实施主流解决方案,请随时将我指向这些。

回答

0

我不知道我是否错过了你的观点。
默认情况下,Lift使用Scala源文件(Boot.scala)来配置所有设置,因为Lift不想将其他语言引入框架,但是您可以使用.properties文件覆盖某些配置。

在Java/Scala世界中,我们使用.properties文件。它只是一个纯文本文件,用于配置或本地化等,就像PHP中的文本配置文件。

Lift Framework拥有对外部数据库配置文件的默认支持,您可以检查Boot.scala中的代码,即如果.properties文件存在,数据库将使用连接配置进行初始化,否则它会使用源文件配置。

2

我用这个来建立数据库:

val vendor = 
    new StandardDBVendor(
    Props.get("db.driver") openOr "org.h2.Driver", 
    Props.get("db.url") openOr "jdbc:h2:mem:db;AUTO_SERVER=TRUE", 
    Props.get("db.user"), 
    Props.get("db.password")) 
LiftRules.unloadHooks.append(vendor.closeAllConnections_! _) 
DB.defineConnectionManager(DefaultConnectionIdentifier, vendor) 

的“道具”简称随后将(默认)在资源道具目录中的文件default.props。

更新:这是我在生产服务器上所做的。通过'Props.whereToLook',您可以提供一个检索配置输入流的功能。这可以是如下例所示的文件,也可以通过网络套接字来获取。

您可能会让应用程序失败,并显示错误对话框。

val localFile =() => { 
    val file = new File("/opt/jb/myapp/etc/myapp.props") 
    if (file.exists) Full(new FileInputStream(file)) else Empty 
} 
Props.whereToLook =() => (("local", localFile) :: Nil) 
+0

随机用户如何使用自己的属性文件呢?他们是否必须打开WAR并插入他们自己的? – Marshmellow1328 2011-02-18 01:23:23