计划作业的 Guice 范围 运行

Guice scope for scheduled job run

我的应用程序是建立在 Guice 和 运行s 计划作业 (cron4j) 之上的,它们显示了一些与固有的 @Singleton 实例相关的问题。

我的问题的适当解决方案似乎具有适用于每个 作业 运行 的范围,而不是单例。它类似于请求范围,但在这种不同的情况下。

我已阅读 docs for Custom Scopes,但我不清楚给定的依赖项如何知道如何从 guice 请求特定范围的实例。

示例:

public class MyJob {
    /* Knows its "run id", which could be used for the scoping mechanism */

    @Inject private Dependency dep;
    public void run() { ... }
}

public class Dependency {
    /* Technically does not know the "run id" from the job */

    @Inject @Named("jobRunScope") private InnerDependency innerDep;
}

感谢任何指导。

如果你查看 the source for RequestScoped,你会发现它使用 ThreadLocal 来存储一个特殊的 Context 映射,保存所有 key-object 对当前请求。

如果您的作业 运行 在单个线程中,您可以使用类似的策略来存储作用域单例。

另一种选择是为每个作业创建一个新的 Injector 实例。