Как использовать Spring Transaction при использовании GenericApplicationContext

При использовании распределенной базы данных Mysql я создал несколько источников данных, sessionFactory с использованием BeanDefinitionBuilder. Но транзакционная аннотация, похоже, не работает, когда я выполняю Insert SQL с использованием метода getBean('bean name') ниже

( (SqlSessionTemplate)context.getBean('имя компонента') ).insert("xxxx",params)

Не могли бы вы объяснить, что я пропустил?

Private GenericApplicationContext context = new GenericApplicationContext();

BeanDefinitionBuilder sessionFactoryBuilder = BeanDefinitionBuilder.rootBeanDefinition(org.mybatis.spring.SqlSessionFactoryBean.class);
sessionFactoryBuilder.addPropertyReference("dataSource", "dataSource" + beanName);
sessionFactoryBuilder.addPropertyValue("configLocation", "/sqlmap.xml");
context.registerBeanDefinition("sqlSessionFactory" + beanName, sessionFactoryBuilder.getBeanDefinition());

BeanDefinitionBuilder transactionManagerBuilder = BeanDefinitionBuilder.rootBeanDefinition(org.springframework.jdbc.datasource.DataSourceTransactionManager.class);
transactionManagerBuilder.addPropertyReference("dataSource", "dataSource" + beanName);
context.registerBeanDefinition("transactionManager",transactionManagerBuilder.getBeanDefinition());

ctx.refresh();

person Andrew    schedule 17.12.2012    source источник


Ответы (1)


Пожалуйста, попробуйте добавить следующие коды ниже и посмотрите, работает ли это.

ConfigurableListableBeanFactory factory = context.getBeanFactory();
AspectJAwareAdvisorAutoProxyCreator aspectJPostProcessor = new AspectJAwareAdvisorAutoProxyCreator();
aspectJPostProcessor.setBeanFactory( factory );
aspectJPostProcessor.setProxyClassLoader( context.getClassLoader() );
factory.addBeanPostProcessor(aspectJPostProcessor);
person ramirezag    schedule 27.01.2013