使用Play和Scala在启动时运行代码

根据不同的项目,有时需要在应用程序开始处理请求之前就执行一些初始化操作。

调用我们希望通过GlobalSettings执行的函数是一种常见的做法,但是不建议这样做。

实现此目标的另一种方法是实现一个将被注入的类,从而添加要在类构造函数上执行的代码。

我们可能认为实现一个使用@Singleton批注的类就足够了。

例如

@Singleton
class StartUpService {

    //The code that needs to be executed

}

但这无法按预期方式工作,因为我们正在使用的组件实例是在需要时延迟创建的。

实例在需要时会延迟创建。 如果一个组件从未被另一个组件使用,那么将根本不会创建该组件。 这通常是您想要的。 对于大多数组件,除非需要它们,否则没有必要创建它们。 但是,在某些情况下,您希望立即启动组件,即使其他组件不使用它们也是如此。 例如,您可能想在应用程序启动时向远程系统发送消息或预热缓存。 您可以通过使用预先绑定来强制快速创建组件。

为了解决这个问题,我们的单身人士必须急于初始化。 为了实现一个渴望的初始化,我们将定义一个渴望的绑定

为了定义一个渴望的绑定,我们必须实现一个扩展AbstractModule的类,然后将我们的服务绑定为渴望的单例。

package com.gkatzioura.eager

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

// A Module is needed to register bindings
class EagerLoaderModule extends AbstractModule {
  override def configure() = {

    bind(classOf[StartUpService]).asEagerSingleton
  }
}

然后,必须通过对conf / application.conf配置进行声明来启用模块。

play.modules.enabled += "com.gkatzioura.eager.EagerLoaderModule"

上述方法通过显式定义模块来创建模块。 另一种方法是使用默认功能,其中Play会加载根包中定义的名为Module的任何类。

总之,一旦应用程序启动,play给我们提供了执行某些功能的选项。 为此,我们需要将组件实现为渴望的单例。 跳过GlobalSettings,因为官方文档不建议这样做。

翻译自: https://www.javacodegeeks.com/2018/01/run-code-startup-play-scala.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值