如何配置Play Framework 2以建立只读数据库连接?

时间:2014-06-09 06:38:26

标签: java playframework playframework-2.1 bonecp

我正在开发一个从Oracle数据库中获取数据的应用程序。它是一个报告应用程序,不需要插入,更新,删除。我知道我可以将数据库用户的权限设置为仅select。但我可以在Play应用程序中配置数据库连接以使其readonly吗?我不想做任何改变或为我的应用创建一个新用户。据我所知,Play Framework 2.1.3使用BoneCp进行数据连接。

修改

我正在使用Java版Play!

1 个答案:

答案 0 :(得分:0)

java.sql.Connection有一个名为setReadOnly的方法,它完全符合它的说法:

DB.withConnection{ implicit connection =>
    connection.setReadOnly(true)
    ...
}

尝试执行写入查询时将抛出异常。您还可以将DB.withConnection打包到整个应用程序中进行清理:

def withReadOnlyConnection[T](block: => T): T = {
    DB.withConnection{ implicit connection =>
       connection.setReadOnly(true)
       block(connection)
    }
}

使用它就像DB.withConnection

一样
def listThings: List[Stuff] = {
     withReadOnlyConnection{ implicit connection =>
         SQL(...)
    }
}

当然,拥有权限有限的单独数据库用户仍然会更好。


修改

对于Java来说,它不会那么漂亮,但同样适用:

Connection connection = DB.getConnection();
connection.setReadOnly(true);

// Do something with this connection.