Создайте функцию, которая принимает ваш DAO в качестве параметра. Комментирование функцию с @Aysnc
При вызове функции, имейте в виду следующее:
- При вызове аннотированный функцию Async из того же класса, вызов будет синхронным (это связано с проксированном объекты)
- методы Async не будут участвовать в том же контексте транзакции в качестве вызывающей
Этот подход побуждает вас думать о своей классовой структуре и следует поощрять. Например, вы можете также обернуть его с помощью @Retryable в случае сбоя.
Конечно, вы также сделать что-то вроде
ExecutorService executorService = Executors.newFixedThreadPool(3);
MyWorker worker = new MyWorker(UserDao userDao);
executorService.submit(worker);
private class MyWorker implements Callable {
private UserDao userDao
MyWorker(UserDao userDao){
this.userDao = userDao;
}
public void call() {
.. do something
}
}
Но это намного больше кода.
Почему вы хотите передать существующий dao, вместо того, чтобы использовать весну в MyThread для инъекций? – azurefrog
Мне нужно сделать сложный/длинный код на фоне –
Считаете ли вы использование Spring @ «@Async» или ExecutorService от Java? –