Spring 3과 Hibernate 3.5를 사용하고 있습니다. 테스트 환경에서 트랜잭션을 롤백하지 않을 것이므로 프로덕션 환경에서 롤백되지 않을까 걱정됩니다.Spring 트랜잭션 유닛 테스트 - 최대 절전 모드 쿼리가 롤백되지 않음
테스트 클래스 :이 테스트 클래스 수를 '내가 여러 데이터 소스를 가지고 있기 때문에 인 SimpleJdbcTemplate 삽입을 할 필요가, 기본적으로 :
public abstract class AbstractTransactionalTemplateTests extends AbstractTransactionalJUnit4SpringContextTests {
protected SimpleJdbcTemplate simpleJdbcTemplate;
@Autowired
DashTemplateRepository dashTemplateRepository;
@Resource(name = "dashDataSource")
public void setDataSource(final DataSource dataSource) {
this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
} ..snip...
UPDATE : 사용자 정의 클래스를 확장
@ContextConfiguration(loader = MyConfigurationLoader.class)
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class DashTemplateRepositoryTest extends AbstractMulitpleDataSourceSpringContextTests {
@Autowired
DashTemplateRepository dashTemplateRepository;
@Test
public void testSaveCategory() {
int initialCount = getCategoryCount();
Category c = new Category();
c.setName("mynewcategory");
dashTemplateRepository.save(c);
assertEquals(initialCount + 1, getCategoryCount());
}
}
그 문제를 해결하기 위해 봄 지원 솔루션을 찾을 수 없었지만 봄 포럼에서이 해결 방법을 게시했습니다. 이 수퍼 클래스를 추출하기 전에 롤백 문제가있었습니다. 나는 문제가 그것보다 더 기본이라고 가정하고, 최대 절전 모드는 트랜잭션 관리자를 인식하지 못하는 것 같아, 내가 증명할 수있는 방법이 있는가?
데이터 소스 콩 :
<bean id="dashDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/dashtemplate"/>
<property name="username" .../>
<property name="password" .../>
</bean>
내 상황에 text.xml 시험은 잘 실행
<!-- Hibernate -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dashDataSource" />
<property name="annotatedClasses">
<list>
<value>com.dash.Category</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
</bean>
<bean id="dashTemplateRepository" class="com.wdp.DashTemplateRepositoryHibernateTemplateImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
, 내 객체가 유지됩니다 (간체, 그것의 일부를 왼쪽), 그러나 그것은 결코 롤백하면 아무런 오류도 나타나지 않습니다
무엇'DashTemplateRepositoryHibernateTemplateImpl' 생겼 지원하지 않습니다? – skaffman
롤백해야하는 이유는 무엇입니까? – Bozho
@Bozho :'@ TransactionConfiguration'의'defaultRollback' 속성이 – skaffman