image.png

DataSourceConfig

DataSourceConfig 자동구성에

JdbcTemplate, JdbcTransactionManager 빈 추가

DataSourceConfig에 JdbcTemplate 메서드 추가

@Bean
@ConditionalOnSingleCandidate(DataSource.class)
@ConditionalOnMissingBean
JdbcTemplate jdbcTemplate(DataSource dataSource) {
    return new JdbcTemplate(dataSource);
}

DataSourceConfig에 JdbcTransactionManager 메서드 추가

@Bean
@ConditionalOnSingleCandidate(DataSource.class)
@ConditionalOnMissingBean
JdbcTransactionManager jdbcTransactionManager(DataSource dataSource) {
    return new JdbcTransactionManager(dataSource);
}

AOP 추가

@MyAutoConfiguration
@ConditionalMyOnClass("org.springframework.jdbc.core.JdbcOperations")
@EnableMyConfigurationProperties(MyDataSourceProperties.class)
@EnableTransactionManagement
public class DataSourceConfig {

image.png

image.png

JdbcTemplateTest

DataSourceTest

@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();
    }
}

테스트 코드에서 데이터베이스를 조작하는 테스트를 할 때 중요한 점 중 하나는 각각의 테스트가 독립적으로 동작하도록 보장하는 것

이를 위해 테스트는 항상 트랜잭션 안에서 동작하며, 테스트가 끝난 후에는 트랜잭션을 롤백해야 됨