Я хотел бы вставить тестовую запись при тестировании своего задания Spring Batch.
Обычно я бы аннотировал тестовый класс с помощью @Transactional
, но это не работает с тестовым классом, который помечен @ SpringBatchTest.
@SpringBatchTest
@SpringBootTest
@Transactional
public class JobTest {
@Autowired
private JobLauncherTestUtils jobLauncherTestUtils;
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
void someTest() throws Exception {
jdbcTemplate.update("insert into some_table (some_col1, some_col2) values ('foo', 'bar')");
jobLauncherTestUtils.launchJob();
}
}
Existing transaction detected in JobRepository. Please fix this and try again (e.g. remove @Transactional annotations from client).
java.lang.IllegalStateException: Existing transaction detected in JobRepository. Please fix this and try again (e.g. remove @Transactional annotations from client).
at org.springframework.batch.core.repository.support.AbstractJobRepositoryFactoryBean$1.invoke(AbstractJobRepositoryFactoryBean.java:177)
Я тоже пробовал @Transactional(propagation = NOT_SUPPORTED)
, но запись не откатывается. Это было предложение в { ссылка }
Мне просто нужны тестовые записи для теста, поэтому я не был уверен, применим ли этот ответ ({ ссылка }) так как это только для теста.