Play:获取默认数据库的连接

2024-05-18

我想获得与我在写入时定义的数据库实例的连接应用程序配置文件:

db.default {
  driver = "com.mysql.jdbc.Driver"
  url = "jdbc:mysql://localhost/test"
  username = ...
  password = ...
}

The docs https://www.playframework.com/documentation/2.5.x/ScalaDatabase#Obtaining-a-JDBC-connection说我们应该注入db: Database进入控制器(工作正常),并且别无他法。预定义的 Guice 注入是隐藏的(不在模块.scala)。它还表明 Play 自动创建默认的数据库单例。

如果我不想将数据库注入控制器,而是单独关注并仅在某些情况下使用它,该怎么办?SqlHandler唯一的工作是执行 SQL 查询的对象:

object SqlHandler {
  val db: Database = ???
  def select(params) {...db...}
  def insert(params) {...db...}
}

我知道我可以创建一个新的数据库实例play.api.db.Databases https://www.playframework.com/documentation/2.5.x/api/scala/index.html#play.api.db.Databases%24与类似的东西

import play.api.db.Databases
val db: Database = Databases(
  driver = "com.mysql.jdbc.Driver"
  url = "jdbc:mysql://localhost/test"
  username = ...
  password = ...
)

但我不仅发现重复所有信息很愚蠢,而且我相信它还会创建数据库两次(一次自动,一次手动,不是吗?)。

是否有任何方便的方法来获取与我的默认数据库的连接,或者how我可以使用 Guice 将其注入其他地方吗?


这个答案假设你想注入你的SqlHandler到控制器中。

如果是这样,您可以在控制器中执行此操作:-

class Application @Inject() (sql: SqlHandler) extends Controller {

  def index = Action { implicit request =>
    ...    
    sql.someSQLHandlerBehaviour()
    ...
  }
}

由于控制器是由 Guice 开箱即用地进行管理的,因此任何可注入的东西也将落入 Guice 生命周期管理的范围内。所以你应该能够注入你的SqlHandler如上所述进入控制器。

自从你的SqlHandler现在由Guice管理,您可以注入jdbc依赖于SqlHandler像这样。

@Singleton
class SqlInjector @Inject() (db: Database) { ... }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Play:获取默认数据库的连接 的相关文章

随机推荐

  • 如何检查用户是否按下了某个键?

    在java中 我有一个程序需要连续检查用户是否按下了某个键 所以在伪代码中 就像 if isPressing w do somthing 在java中 你不检查是否按下了某个键 而是检查listen to KeyEvents 实现您的目标的
  • 导航项点击事件在 Android 中不起作用

    Navigationview 点击事件在 Android 中不起作用 我单击项目元素 但代码不起作用 Java 和 XML 代码如下 Codes menulayout DrawerLayout findViewById R id drawe
  • jQuery 或 Javascript - 如何禁用窗口滚动而不溢出:隐藏;

    您好 是否可以在不使用的情况下禁用窗口滚动overflow hidden 当我悬停一个元素时 我试过 chat content on mouseenter function document scroll function e if e h
  • Bootstrap 选择的自定义样式

    我发现选择 Twitter Bootstrap 的下拉菜单非常丑陋 如何仅针对选择小部件停 用 Bootstrap 或者是否可以自定义选择下拉列表的外观 一探究竟 https developer snapappointments com b
  • jfreechart setbackgroundpaint 不执行任何操作

    对于任何有使用 jFreeChart for Swing 应用程序经验的人 我在更改图表背景时遇到问题 我的最终目标是为我的图表设置平滑的渐变背景 但我根本无法更改任何背景 这行代码chart setBackgroundPaint Colo
  • Date-fns parseISO 返回错误日期

    您好 我从 Date fns 得到错误的日期 我正在使用 date fns 格式格式化 new Date format date yyyy MM dd 所以当我console log时 会发生这种情况 console log dateOfB
  • 部分唯一索引不适用于冲突子句 PostgreSQL

    表结构 create table example a id integer b id integer c id integer flag integer 部分索引 create unique index u idx on example a
  • AVCaptureSession 具有多个方向问题

    我正在尝试实现条形码扫描仪 我有一个 AVCaptureSession 它从 AVCaptureDevice 接收视频 我想支持所有方向 使用以下代码 当我运行应用程序时 纵向一切正常 然而 在横向方向上 视图会旋转 但视频输入不会旋转 所
  • Angular 7:ng 测试挂起,不断重复运行测试

    我最近将 Angular 6 应用程序迁移到角7 my 包 json看起来像这样 name myApp version 3 0 0 license MIT scripts ng ng start ng serve public host h
  • 如何确定当前使用哪个网格选项

    我将 Bootstrap 3 用于使用 PHP 和 HTML 创建的网页 随着响应式网格和类的开启引导程序3您可以将多个类分配给一个 div 以根据当前屏幕尺寸定义不同的宽度 例如 div class col lg 3 col md 3 c
  • 如何在java中找到类路径上的资源?具体以 .hbm.xml 结尾的内容

    如何在java中找到类路径上的资源 特别是以 hbm xml 结尾的内容 我的目标是获取类路径上以 hbm xml 结尾的所有资源的列表 你必须得到一个类加载器 http java sun com j2se 1 5 0 docs api j
  • Flutter:将字符串转换为 Map

    我正在使用 SQFlite 在本地存储数据 我有一个表 其中有一个名为 json 的字段 该字段的类型为 TEXT 并存储转换为字符串的 json 例如 name Eduardo Age 23 性别男 到目前为止 一切正常 但随后我需要从数
  • 如何使用 xpath 检查某个对象在网页中是否可见?

    我正在 R 中使用 RSelenium 包来进行网络抓取 有时加载网页后 需要检查某个对象在网页中是否可见 例如 library RSelenium open a browser RSelenium startServer remDr lt
  • 如何在golang中创建一个充满“000000...”数据的10MB文件?

    我打算在日志或磁盘队列等系统中使用 fdatasync 首先是在 ext4 等文件系统中创建一个带有 000000 的 10MB 文件 但我不知道如何正确地做到这一点 jnml fsc r630 src tmp SO 16797380 ls
  • 如何使用@PreviewParameter注解?

    我正在尝试预览一个以一个字符串参数作为输入的可组合项 我不知道如何 PreviewParameter应该使用注释 这是我尝试过的 class DogProvider PreviewParameterProvider
  • 服务器上的 Rails 会话

    我想让一些 Rails 应用程序在不同的服务器上共享同一个会话 我可以在同一服务器内完成此操作 但不知道是否可以在不同服务器上共享 有人已经做过或者知道怎么做吗 Thanks Use the 数据库会话存储 https github com
  • 在 iOS 上使用 Web 服务的最佳方式?

    我想构建一个 iOS 应用程序 让您登录到网络服务 之后 应用程序将 当用户选择时 通过 https 发送登录名 密码以及请求的变量 例如 在请求 新闻更新 后 它将收到 XML 格式的请求信息 类似于
  • 从 df 中提取具有两列的重叠行对

    我想找出这两个表之间哪些对重叠 gt dput data1 structure list Name x c MDH1 MDH1 IDH2 IDH2 IDH2 IDH2 IDH2 IDH2 IDH2 SCOALB SCOALB CSY4 CS
  • 使用无符号整数时循环条件停止于 0?

    我有一个必须从 N 到 0 含 的循环 我的i变量的类型size t通常是无符号的 我目前正在使用以下代码 for size t i N i size t 1 i 那是对的吗 有没有更好的方法来处理这种情况 Thanks Vincent 是
  • Play:获取默认数据库的连接

    我想获得与我在写入时定义的数据库实例的连接应用程序配置文件 db default driver com mysql jdbc Driver url jdbc mysql localhost test username password Th