Как назначить запланированные задачи конкретному потоку c? - PullRequest
0 голосов
/ 29 мая 2020

Коллеги, у меня есть группа задач по расписанию. В файле свойств весенней загрузки это выглядит так:

group1.task1.run = <execute every first minute>
group1.task2.run = <execute every second minute>


group2.task1.run = <execute every first minute>
group2.task2.run = <execute every second minute>

Можно ли создать два разных потока (T1 и T2) и назначить первую группу запланированных задач для выполнения в T1 thread, а вторая группа в T2 thread?

Я не могу просто увеличить PoolSize в TaskScheduler, потому что после этого group1 задачи будут выполняться в разных потоках, это не подходит для бизнес-процесса.

Буду благодарен за любой совет и помощь.

1 Ответ

2 голосов
/ 29 мая 2020

Насколько мне известно, невозможно указать один поток. Однако вы можете указать Executor, который следует использовать для планирования ваших задач. Если вы не хотите, чтобы ваши задачи выполнялись в одном потоке, просто создайте пул потоков с одним потоком в нем, например:

@Configuration
@EnableAsync
@EnableScheduling
public class TempConfig {

    @Scheduled(fixedRate = 1000)
    @Async(value = "threadPool1")
    public void task1() {
        System.out.println("Task1: " + Thread.currentThread());
    }

    @Scheduled(fixedRate = 1000)
    @Async(value = "threadPool2")
    public void task2() {
        System.out.println("Task2: " + Thread.currentThread());
    }

    @Bean
    public Executor threadPool1() {
        return Executors.newFixedThreadPool(1);
    }

    @Bean
    public Executor threadPool2() {
        return Executors.newFixedThreadPool(1);
    }
}

Конечно, вы также можете просто запланировать задачи самостоятельно :

var s1 = Executors.newScheduledThreadPool(1);
var s2 = Executors.newScheduledThreadPool(1);

// schedule tasks of group1
s1.scheduleWithFixedDelay(...);
s1.scheduleWithFixedDelay(...);

// schedule tasks of group2
s2.scheduleWithFixedDelay(...);
s2.scheduleWithFixedDelay(...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...