Я изо всех сил пытаюсь запустить поток в фоновом режиме с автоматическим бином в весенней загрузке. Из всего источника inte rnet я обнаружил, что, если я создаю новый экземпляр объекта, он будет выбрасывать ноль, поскольку он не является частью жизненного цикла весны, и вместо этого мне нужно будет использовать executorTask и внедрить его как bean-компонент. Вот то, что я пытался до сих пор безуспешно.
Мое приложение. java file
@SpringBootApplication
@EnableAsync
public class Application {
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
SpringApplication.run(Application.class, args);
}
}
My ThreadConfig. java file [где я фактически создаю компонент для задачи executor]
@Configuration
public class ThreadConfig {
@Bean
public TaskExecutor threadPoolTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(4);
executor.setMaxPoolSize(4);
executor.setThreadNamePrefix("default_task_executor_thread");
executor.initialize();
return executor;
}
}
AsyncService. java file
@Service
public class AsynchronousService {
@Autowired
private ApplicationContext applicationContext;
@Autowired
private TaskExecutor taskExecutor;
public void executeAsynchronously() {
NotificationThread myThread = applicationContext.getBean(NotificationThread.class);
taskExecutor.execute(myThread);
}
}
Фактический поток, который я хочу запустить в фоновом режиме
@Component
@Scope("prototype")
public class NotificationThread implements Runnable {
@Autowired
private UserDao userDao;
public void run() {
while (true) {
System.out.println("thread is running...");
List<User> users = userDao.findAllByType("1"); //Used to get Error here when running directly from main
try {
Thread.sleep(1000 );
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
До того, как я напрямую создать эту тему в основном я бы получил ошибку, как указано в строке комментария. Поэтому я переключился на taskexecutor. NotificationThread - это поток, который я хочу запустить в фоновом режиме. Но это не работает, не уверен, какие изменения внести. Поможет руководство.