Пул потоков с Spring @Value для размера пула не работает должным образом - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть пул потоков, и ввод для размера пула передается с помощью @value весной, ссылка на который есть в файле .properties.как показано ниже:

@Value("${project.threadPoolSize}")
private static int threadPoolSize;

private static ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(threadPoolSize);

@PostConstruct
public void MasterProcessService() {
    try {
        LOGGER.debug("Entering processServices in MasterProcessThread ");

Когда я пытаюсь указать размер пула потоков, используя значение аннотации, он просто объединяет один поток и выполняет операцию сна, но позже не объединяет другие потоки.

Когда я передаю размер пула потоков напрямую, используя:

private static ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(11);

Он объединяет все потоки и состояния сна и выполнения, как определено.

Может ли кто-нибудь помочь мне, используя @Value в размере пула потоков вместо непосредственного определения числа?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Spring не позволяет вводить значение в статические переменные.Вместо этого используйте java.lang.Integer.

0 голосов
/ 13 декабря 2018

Это все из-за 2 фактов:

1 - @Value не работает со статическими полями.Если вы хотите заполнить его значением - не делайте его статическим.

@Value("${project.threadPoolSize}")
private static int threadPoolSize;

2 - сначала создается переменная static threadPool, прежде чем threadPoolSize заполняется значением (если онопока не статично).

Если вам нужно установить значение для некоторого статического поля через @Value, вы можете попробовать сделать это следующим образом:

private static ScheduledExecutorService threadPool;

@Value("${project.threadPoolSize}")
public void setThreadPool(Integer poolSize) {
    threadPool = Executors.newScheduledThreadPool(poolSize);
}

Ввод значения будетвызывается при запуске и вызывает метод setThreadPool, который инициирует статическую переменную с определенным размером пула.

...