【问题标题】:Playframework with anorm and Spring DataSource使用 anorm 和 Spring DataSource 的 Playframework
【发布时间】:2013-12-11 22:11:48
【问题描述】:

问题:

有没有办法将异常映射器与“用户提供的”数据源一起使用?

长篇大论:

我想使用 Spring Cloud 为我的 Play 应用程序配置 DataSource。 我现在在这个问题上苦苦挣扎了一段时间,并且已经尝试了很多机器人,到目前为止没有任何效果。

我需要这样做,因为我们正在使用的云 (CloudFoundry) 的自动配置无法正常工作 (see bug report)。

为我的应用程序设置 Spring Cloud 后,我得到了一个 DataSource,应该由 anorm 使用。但是没有办法将这个DataSource 注入到 Anorm 中。 Play Anorm 插件仅适用于 Play DBPlugin,它被硬编码为使用来自 application.conf (db.default) 的默认数据库或至少一个可以从配置文件中读取的数据库。

我发现了一个older blog post,它显示了一种设置DBPlugin 使用的DataSource 的方法。但是设置

DB.datasource = dataSource;

不适用于我当前使用的 Play 版本。

【问题讨论】:

    标签: datasource playframework-2.1 cloud-foundry anorm


    【解决方案1】:

    Anorm 对您使用的数据源一无所知。 anorm 上与数据库对话的每个方法都采用隐式的java.sql.Connection 参数。由您决定该连接的来源。显然,最常见的方法是使用 Play 的 DB API,使用 DB.withConnection 或 DB.withTransaction,但您可以编写自己的 API,使用自己的数据源。

    也可以编写一个自定义数据库插件并禁用基于bonecp 的默认播放插件,如果您这样做,那么您可以将播放数据库API 与您的自定义数据源一起使用。为此,请实现您自己的play.api.db.DBApi 和play.api.db.DBPlugin 实现,创建一个注册了您的数据库插件的play.plugins 文件(例如,其中包含100:com.foo.MyDbPlugin),然后通过添加@987654329 禁用Play 的内置功能@在application.conf。

    【讨论】:

    • 感谢您指出正确的方向。我复制了 DBPlugin 并进行了添加,核心数据源处理现在由 SpringCloud 完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    相关资源
    最近更新 更多