Как запустить (и в конечном итоге остановить) поток демона в Spring-Boot?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как запустить (и в конечном итоге остановить) поток демона в Spring-Boot?

Сообщение Anonymous »

Я пишу приложение Spring-Boot для мониторинга каталога и обработки файлов, добавляемых в него. Я запускаю поток, создавая ApplicationRunner в своем классе Application, который вызывает метод, помеченный @Async:

Код: Выделить всё

@SpringBootApplication
@EnableAsync
public class Application {

@Autowired
private DirectoryMonitorService directoryMonitorService;

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

@Bean
public ApplicationRunner startDirectoryMonitorService() {
return args -> directoryMonitorService.monitorSourceDirectoty();
}
}
Вот код DirectoryMonitorService, в котором есть метод, помеченный @Async:

Код: Выделить всё

@Service
public class DirectoryMonitorService {

private static final Logger logger = LogManager.getLogger(DirectoryMonitorService.class);

@Value("${timeout}")
private long timeout;

@Autowired
private WatchService watchService;

@Async
public void monitorSourceDirectoty() {
while (true) {
WatchKey watchKey;
try {
watchKey = watchService.poll(timeout, TimeUnit.SECONDS);
} catch (ClosedWatchServiceException | InterruptedException e) {
logger.error("Exception occured while polling from source file", e);
return;
}

// process the WatchEvents

if (!watchKey.reset()) {
break;
}
}
}
}
Наконец, здесь я создаю ThreadPoolTaskExecutor:

Код: Выделить всё

public class AsyncConfig extends AsyncConfigurerSupport {

private static final Logger logger = LogManager.getLogger(AsyncConfig.class);

private static final String THREAD_NAME_PREFIX = "Parser-";

@Value("${corePoolSize}")
public int corePoolSize;

@Value("${maxPoolSize}")
public int maxPoolSize;

@Value("${queueCapacity}")
public int queueCapacity;

@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(corePoolSize);
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(queueCapacity);
executor.setThreadNamePrefix(THREAD_NAME_PREFIX);
executor.initialize();

return executor;
}

@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return (Throwable ex, Method method, Object... params) -> {
logger.error("Exception message - " + ex.getMessage());
logger.error("Method name - " + method.getName());
for (Object param : params) {
logger.error("Parameter value - " + param);
}
};
}
}
Почему-то мне кажется, что это не самый элегантный способ запуска основного потока. Есть ли у кого-нибудь лучшее решение?

Кроме того, я бы предпочел заменить while (true) логической переменной, которой я могу установить значение false когда Spring-Boot отключается. Кто-нибудь знает, какой интерфейс мне нужно для этого реализовать?

Подробнее здесь: https://stackoverflow.com/questions/409 ... pring-boot
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как запустить (и в конечном итоге остановить) поток демона в Spring-Boot?
    Anonymous » » в форуме JAVA
    0 Ответы
    49 Просмотры
    Последнее сообщение Anonymous
  • Как начать (и в конечном итоге остановить) нить демона в пружине?
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Как начать (и в конечном итоге остановить) нить демона в пружине?
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Почему родительская ViewModel в конечном итоге становится нулевой?
    Anonymous » » в форуме C#
    0 Ответы
    60 Просмотры
    Последнее сообщение Anonymous
  • Нормально ли в конечном итоге столкнуться с «взаимными правилами» при анализе рыночной корзины?
    Anonymous » » в форуме Python
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»