Я использую несколько источников данных в своем весеннем проекте.
Я включаю / отключаю их путем ручной настройки во время запуска проекта.
Все они могут быть активными одновременно.
Таким образом, компонентactionManager может быть активным или нет.
Я реализую это с помощью аннотации @Conditional в классе конфигурации Spring.
Когда я использую отключенную транзакционную аннотацию в методах, у меня возникает NoSuchBeanDefinitionException.
Когда я определяю bean-компонентactionManager условно, как использовать аннотацию транзакций для методов?
Bean-компонент archiveTransactionManager не создается с помощью аннотации @Conditional, и я хочу, чтобы весенняя проверка пропускалась для проверки bean-компонента в диспетчере условных транзакций.
Для условных bean-компонентов sessionFactory я установил параметр 'required' в аннотации Autowired на false, чтобы пружина не выдавала исключение NoSuchBeanDefinitionException, но что мне делать для @Transactional?
Класс конфигурации
@Bean("archiveTransactionManager")
@Conditional(ArchiveCondition.class)
public HibernateTransactionManager archiveTransactionManager() {
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(archiveSessionFactory());
return transactionManager;
}
Транзакционный метод
@Transactional(value = "archiveTransactionManager", readOnly = true)
private List<DocumentItem> loadArchivedDocumentItem() {...}
Использование
if(GeneralSetting.isArchive)
documentService.loadArchivedDocumentItem();
Текущий результат:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'archiveTransactionManager' available: No matching PlatformTransactionManager bean found for qualifier 'archiveTransactionManager' - neither qualifier match nor bean name match!
Я хочу валидный бин весеннего пропуска условных бинов транзакции в некоторых ситуациях, которые не создаются условиями .