美好的一天! 我的问题是,当我将另一个数据库的配置从xml转移到@Bean时,我的事务丢失了。...不回滚并且不起作用。 我在第一次插入后在数据库中创建行(!)后在数据库中看到了这一点,但是在此方法(事务)中开始第二次插入时,我出现了异常,并且在第一个插入后的行留在了DB上!
此xml
<bean name="sqlSessionFactoryYarus" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="/WEB-INF/MapperConfigYarus.xml" />
<property name="dataSource" ref="dataSourceYarus" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="ru.project.crm.mapper_yarus"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryYarus" />
</bean>
<bean id="transactionManagerYarus" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSourceYarus" />
<qualifier value="yarus"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManagerYarus" />
此代码(dataSource不会浪费空间)
@Component
@Scope("singleton")
@DependsOn("springApplicationContextHolder")
public class YarusConnectionConfig {
@Bean
public SqlSessionFactory sqlSessionFactoryYarus() throws Exception {
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSourceYarus());
sqlSessionFactory.setConfigLocation(new ClassPathResource("../MapperConfigYarus.xml"));
return sqlSessionFactory.getObject();
}
@Bean
public MapperScannerConfigurer yarusMapper() throws Exception {
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setSqlSessionFactoryBeanName("sqlSessionFactoryYarus");
msc.setBasePackage("ru.project.crm.mapper_yarus");
return msc;
}
@Bean
public DataSourceTransactionManager transactionManagerYarus() throws Exception {
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSourceYarus());
return dataSourceTransactionManager;
}
}
还有
我要事务性注释@Transactional(value =“ transactionManagerYarus”)时的所有步调 如果我用xml Transactional构建项目,效果很好 但是如果使用@Bean进行构建,则无法正常工作...
白斑病救救我!
我用
1)春天4.3
2)MyBatis
3)Postgesql
4)Java 8
答案 0 :(得分:0)
我们也找到了解决方案。 问题出在数据源中
@Bean(destroyMethod = "close", name = "dataSourceYarus")
public ComboPooledDataSource dataSourceYarus() {
ComboPooledDataSource cpds = new ComboPooledDataSource();
//config connection
}
这是我的bean,例如,我将这种bean称为方法
new DataSourceTransactionManager(dataSourceYarus());
我对此并不重视,因为在所有示例中都是如此。 xml配置中的BUT在他的名字上引起了像“ Bean”这样的问题,我将java-config中的调用替换为
new DataSourceTransactionManager(context.getBean("dataSourceYarus"))
然后...。这对我有用! 因为如果调用此方法,则每次创建新池时事务都结束了