JdbcTemplate, JdbcTransactionManager 빈 추가
@Bean
@ConditionalOnSingleCandidate(DataSource.class)
@ConditionalOnMissingBean
JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@ConditionalOnSingleCandidate(DataSource.class)
: Spring 컨텍스트에 등록된 DataSource의 빈이 한 개만 있을 때만 해당 빈을 가져와서 사용하겠다는 조건을 설정하는 데 사용@Bean
@ConditionalOnSingleCandidate(DataSource.class)
@ConditionalOnMissingBean
JdbcTransactionManager jdbcTransactionManager(DataSource dataSource) {
return new JdbcTransactionManager(dataSource);
}
@MyAutoConfiguration
@ConditionalMyOnClass("org.springframework.jdbc.core.JdbcOperations")
@EnableMyConfigurationProperties(MyDataSourceProperties.class)
@EnableTransactionManagement
public class DataSourceConfig {
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = HellobootApplication.class)
@TestPropertySource("classpath:/application.properties")
@Transactional
public class DataSourceTest {
@Autowired
DataSource dataSource;
@Test
public void connect() throws SQLException {
Connection conection = dataSource.getConnection();
conection.close();
}
}
테스트 코드에서 데이터베이스를 조작하는 테스트를 할 때 중요한 점 중 하나는 각각의 테스트가 독립적으로 동작하도록 보장하는 것
이를 위해 테스트는 항상 트랜잭션 안에서 동작하며, 테스트가 끝난 후에는 트랜잭션을 롤백해야 됨