【问题标题】:When play framework create new instance of controller?播放框架何时创建新的控制器实例?
【发布时间】:2020-08-07 03:12:17
【问题描述】:

我在游戏框架中的代码

public class MyController extends Controller {
    @Inject
    private final MyService myService;

    public Result myRequest(Http.Request request) throws InterruptedException {
        logger.info("Controler id {}", System.identityHashCode(this));
        myService.assignTemp();
        return ok();
    }
}
public class MyService {
    String temp = "temp";

    public void assignTemp() throws InterruptedException {
        temp = UUID.randomUUID().toString();
        logger.info("I generate {}", temp);
        Thread.sleep(2000);
        logger.info("I return {}", temp);
    }
}

当我同时调用 4 个请求时。这是我的日志

2020-08-07 09:44:43 +0700 [INFO] application-akka.actor.default-dispatcher-15 - Controler id 1342212114
2020-08-07 09:44:43 +0700 [INFO] application-akka.actor.default-dispatcher-15 - I generate 45d596ca-40bc-4bbd-8d2d-494b49142133
2020-08-07 09:44:44 +0700 [INFO] application-akka.actor.default-dispatcher-17 - Controler id 1342212114
2020-08-07 09:44:44 +0700 [INFO] application-akka.actor.default-dispatcher-17 - I generate 8ec9ebf0-1571-4e03-b7b8-1f4dc2fcba67
2020-08-07 09:44:45 +0700 [INFO] application-akka.actor.default-dispatcher-16 - Controler id 1342212114
2020-08-07 09:44:45 +0700 [INFO] application-akka.actor.default-dispatcher-16 - I generate fe47949e-f8f9-44d1-8a40-f808be3b9f5d
2020-08-07 09:44:45 +0700 [INFO] application-akka.actor.default-dispatcher-15 - I return fe47949e-f8f9-44d1-8a40-f808be3b9f5d
2020-08-07 09:44:45 +0700 [INFO] application-akka.actor.default-dispatcher-22 - Controler id 1342212114
2020-08-07 09:44:45 +0700 [INFO] application-akka.actor.default-dispatcher-22 - I generate e15cb14c-9122-43a0-b024-1615655812cb
2020-08-07 09:44:46 +0700 [INFO] application-akka.actor.default-dispatcher-17 - I return e15cb14c-9122-43a0-b024-1615655812cb
2020-08-07 09:44:47 +0700 [INFO] application-akka.actor.default-dispatcher-16 - I return e15cb14c-9122-43a0-b024-1615655812cb
2020-08-07 09:44:47 +0700 [INFO] application-akka.actor.default-dispatcher-22 - I return e15cb14c-9122-43a0-b024-1615655812cb

Play 对四个线程使用相同的 MyController 实例。这使得许多 注入组件 变得非线程安全

我正在寻找何时播放框架创建新的控制器实例?的答案。或 Play 对任何请求使用相同的实例

这是Play document关于控制器

谢谢

【问题讨论】:

    标签: java dependency-injection playframework controller akka


    【解决方案1】:

    它在启动时创建一个控制器实例,然后对所有请求使用同一个实例。

    (假设您使用的是使用 Guice 的标准 Play 设置)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      相关资源
      最近更新 更多