gpt4 book ai didi

java - 如何将自定义执行器注入(inject)到播放应用程序中?

转载 作者:行者123 更新时间:2023-11-30 07:19:35 25 4
gpt4 key购买 nike

我通过 play-akka 配置文件分配了一个专用的线程池用于数据库操作。现在,我正在将需要此线程池的服务与参与者系统一起注入(inject)并访问执行上下文。

 public class ServiceA{

final Executor executionContext;

@Inject
public ServiceA(ActorSystem system) {
this.executionContext = system.dispatchers().lookup("akka.actor.db-context");
}

但这使得测试 ServiceA 变得困难。我想做的就是直接注入(inject)执行器,如下所示:

 public class ServiceA{

final Executor executionContext;

@Inject
public ServiceA(Executor dbExecutionCtx) {
this.executionContext = dbExecutionCtx;
}

我该如何实现这一目标?我尝试创建一个 guice 模块来注入(inject) Executor,但它错误地提示没有启动应用程序,并且在绑定(bind)类时无法访问 ActorSystem。

最佳答案

我使用一种模式,可以在任何我想要的地方获得 EC。我在单例中创建一个 ActorSystem 并将其注入(inject)到我的服务中。

我有一个包含 ActorSystems、Dispatchers 和更多用于监控的设计。看看这个,看看是否可以集成它。

因此,如果 MyActorSystem 被注入(inject)到您的类中,您可以从中访问 EC。看一下 MyDispatcher 和 EC 的使用:

@Singleton
public class MyActorSystem implements IMyActorSystem{

ActorSystem system;
public MyActorSystem() {
system = ActorSystem.create();

}

public ActorRef create() {
final ActorRef actor = system.actorOf(
Props.create(MyWorker.class).withDispatcher("my-disp")
);
return actor;
}

public void shutdown(){
system.shutdown();
}

public ExecutionContextExecutor getDispatcher(){
return system.dispatcher();
}
}

public class MyDispatcher implements IMyDispatcher {

MyActorSystem system;

@Inject public MyDispatcher(MyActorSystem system) {
this.system = system;
}


public CompletableFuture<Object> dispatch(final Object story) {
List<CompletableFuture<Object>> futureList = new ArrayList<>();
final ActorRef actor = system.create();
final CompletableFuture<Object> completed = FutureConverter
.fromScalaFuture(Patterns.ask(actor, story, 50000)).executeOn(system.getDispatcher())
.thenApply(i -> (Object) i);
return completed;
}

public ExecutionContextExecutor getDispatcher(){
return system.getDispatcher();
}
}

关于java - 如何将自定义执行器注入(inject)到播放应用程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37801531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com