Helidon Microprofile 中的安排

问题描述 投票:0回答:1

我正在尝试在 Helidon Microprofile 中配置调度程序。我试图从配置文件中获取 IntialDelay 和固定速率值,但它似乎不起作用。 我提供了我尝试过的所有不同方法。请帮助我以最好的方式解决这个问题。 谢谢你。

在下面的代码中,我期望调用构造函数并首先初始化 TaskScheduler()。但这并没有发生。 taskScheduler 未得到安排。

@ApplicationScoped
public class TaskScheduler {
    private final Long initialDelay;
    private final Long fixedRate;
    private static final Logger LOGGER = Logger.getLogger(TaskScheduler.class.getName());

    @Inject
    public TaskScheduler() {
        org.eclipse.microprofile.config.Config config = ConfigProvider.getConfig();
        this.initialDelay = config.getOptionalValue("scheduler.initialDelay", Long.class).orElse(2L);
        this.fixedRate = config.getOptionalValue("scheduler.fixedRate", Long.class).orElse(2L);
       ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
       scheduler.scheduleAtFixedRate(this::taskScheduler, this.initialDelay, this.fixedRate, TimeUnit.SECONDS);
    }
    public void taskScheduler()  {
        LOGGER.info("Running tasks: ");

    }
}

我尝试将 ConfigProperty 作为构造函数参数传递,如下代码所示,但出现此异常 线程“main”中的异常 org.jboss.weld.exceptions.DeploymentException:WELD-001408:带有限定符@Default

的 Long 类型的依赖关系不满足
@Inject
public TaskScheduler(
        @ConfigProperty(name = "scheduler.initialDelay") Long delay,
        @ConfigProperty(name = "scheduler.fixedRate") Long rate
                     ) {
    this.initialDelay = delay;
    this.fixedRate = rate;

   ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
   scheduler.scheduleAtFixedRate(this::taskScheduler, this.initialDelay, this.fixedRate, TimeUnit.SECONDS);
}

我也尝试过使用@PostConstruct,但这根本没有被调用。

 @PostConstruct
 public void postConstruct() {
     LOGGER.info("Running tasks: ");
     Config config = ConfigProvider.getConfig();
     long initialDelay = config.getOptionalValue("scheduler.initialDelay", Long.class).orElse(2L);
     long fixedRate = config.getOptionalValue("scheduler.fixedRate", Long.class).orElse(2L);
     ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
     scheduler.scheduleAtFixedRate(this::taskScheduler, initialDelay, fixedRate, TimeUnit.SECONDS);
 } 
java microservices scheduling microprofile helidon
1个回答
0
投票

正如 Dmitry 所建议的,我们有专门的调度支持,您不需要手动执行任何操作。 https://helidon.io/docs/v4/mp/scheduling

© www.soinside.com 2019 - 2024. All rights reserved.