在Play 2.4中使用DI时如何进行数据库初始化?

时间:2015-06-20 11:35:45

标签: scala playframework dependency-injection playframework-2.4

使用GlobalSettings.onStart and whole Global object播放2.4劝阻。

我正在使用play-slick并且它有great DI sample in GitHub,但它缺少一个如何进行数据库初始化的示例。

在使用DI和GlobalSettings.onStart不可用时如何实现数据库初始化?

数据库初始化的常见情况是:如果在DEV模式下,请添加这些行,如果PROD执行这些操作。想要的例子。

1 个答案:

答案 0 :(得分:5)

诀窍是将初始化放在注入类的构造函数中。这是一个例子:

添加app/modules/Database.scala

package modules

import com.google.inject.AbstractModule
import com.google.inject.name.Names

trait Database {
  def create(): Unit
  def drop(): Unit
}

class TestDatabase extends Database {
  initialize() // running initialization in constructor
  def initialize() = {
    println("Setup database with test data here")
  }
  def create() = ()
  def drop() = ()
}

class ProdDatabase extends Database {
  // similar to above
}

class DatabaseModule extends AbstractModule {
  def configure() = {
    bind(classOf[Database])
      .annotatedWith(Names.named("development"))
      .to(classOf[TestDatabase]).asEagerSingleton
    bind(classOf[Database])
      .annotatedWith(Names.named("production"))
      .to(classOf[TestDatabase])
  }
}

加入conf/application.conf

play.modules.enabled += "DatabaseModule"

这就是开始。 .asEagerSingleton将运行构造函数代码而无需您注入它。如果要选择要注入的那个,那么您需要删除.asEagerSingleton并加载相应的数据库实现:

  • 基于here(参见链接);或
  • 服务/控制器中的
  • ,例如:

    @Inject @Named(“development”)数据库数据库

相关问题