Ответ 1
Не обходите себя нитями самостоятельно. Spring (а также простая Java) имеет для этого хорошую абстракцию.
Сначала создайте компонент типа TaskExecutor
в вашей конфигурации
@Bean
public TaskExecutor taskExecutor() {
return new SimpleAsyncTaskExecutor(); // Or use another one of your liking
}
Затем создайте CommandLineRunner
(хотя бы ApplicationListener<ContextRefreshedEvent>
также работал), чтобы запланировать вашу задачу.
@Bean
public CommandLineRunner schedulingRunner(TaskExecutor executor) {
return new CommandLineRunner() {
public void run(String... args) throws Exception {
executor.execute(new SimularProfesor());
}
}
}
Разумеется, вы также можете сделать свой собственный класс под управлением весны.
Преимущество этого в том, что Spring также очистит потоки для вас, и вам не нужно думать об этом самостоятельно. Я использовал CommandLineRunner
здесь, потому что это будет выполняться после того, как все компоненты bean будут инициализированы.