代码如下:
@RunWith(SpringJUnit4ClassRunner.class)
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class UserDaoTest{
@Resource
private UserDao userDao;
@Test
public void testinsertUser() {
/*===========非注解实现插入操作(可以)========*/
/* ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = new User();
user.setUserName("admin");
user.setPassword("213122");
UserDao userDao = (UserDao) ac.getBean("userDao");
int affectedRows = userDao.insertUser(user);*/
/*===========注解实现插入操作(有返回值,但是数据库未插入,原因可能是事务未提交的缘故)========*/
User user = new User();
user.setUserName("wudi");
user.setPassword("213122");
int affectedRows = userDao.insertUser(user);
System.out.println("======》"+affectedRows);
Assert.assertEquals(affectedRows, 1);
logger.warn("the number of rows affected: "+affectedRows);
}
问题如下:在上面的·方法中,非注解方式调用配置文件实现数据插入成功,注解方式调用配置文件数据插入返回值正常,数据库表插入id(自增)也明显改变,但是数据库就是没有该条数据,即插入本质上未成功,我想知道原因是什么,是事务未提交的缘故?但是事务明显有始有终啊,下面是日志:
一月 16, 2018 11:40:00 上午 org.springframework.test.context.transaction.TransactionalTestExecutionListener startNewTransaction
信息: Began transaction (1): transaction manager [org.springframework.jdbc.datasource.DataSourceTransactionManager@39b75a89]; rollback [true]
11:40:00.423 [main] DEBUG c.a.druid.pool.PreparedStatementPool - {conn-10010, pstmt-20000} enter cache
======》1
11:40:00.424 [main] WARN com.flux.tmsws.test.UserDaoTest - the number of rows affected: 1
一月 16, 2018 11:40:00 上午 org.springframework.test.context.transaction.TransactionalTestExecutionListener endTransaction
有人说是配置文件的问题,下面是关于事务的配置文件:
<!-- 开启事务控制的注解支持(后添加的,也没起作用) -->
<tx:annotation-driven transaction-manager="transactionManager" />
<context:component-scan base-package="com.flux.tmsws.*" />
<bean id = "transactionManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" >
<property name = "dataSource">
<ref bean = "dataSource"/>
</property>
</bean>
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate" abstract="false" lazy-init="false" autowire="default">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
<bean id="userDao" class="com.flux.tmsws.dao.Impl.UserDaoImpl">
</bean>
请问原因在哪呢???