JdbcTransactionManager 는 DataSourceTransactionManager 와 같은 것으로 생각하면 된다. 여기에 예외 변환 기능이 보강되었다.

해당 부분들은 만약 DB를 사용하는 다른 프로젝트를 진행한다면 이러한 객 체들을 또 스프링 빈으로 등록해야 할 것이다

@Slf4j
@Configuration
public class DbConfig {

    @Bean
    public DataSource dataSource() {
        log.info("dataSource 빈 등록");
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setDriverClassName("org.h2.Driver");
        dataSource.setJdbcUrl("jdbc:h2:mem:test"); // db 자체도 memory db 로 사용 - 편의상 
        dataSource.setUsername("sa");
        dataSource.setPassword("");
        return dataSource;
    }

    @Bean
    public TransactionManager transactionManager() {
        log.info("transactionManager 빈 등록");
        return new JdbcTransactionManager(dataSource());
    }

    @Bean
    public JdbcTemplate jdbcTemplate() {
        log.info("jdbcTemplate 빈 등록");
        return new JdbcTemplate(dataSource());
    }

}

자동 구성 확인

@Configuration 을 주석처리: 이렇게 하면 해당 설정 파일 자체를 스프링이 읽어들이지 않는다. (컴포넌 트 스캔의 대상이 아니다.)

@Bean 주석처리: @Bean 이 없으면 스프링 빈으로 등록하지 않는다

주석처리후 아래의 테스트 코드를 실행하면 빈 객체로 등록하지 않은 객체들은 이모두 스프링 부트가 자동으로 등록해 준 것이다

@Slf4j
@SpringBootTest
public class DbConfigTest {

    @Autowired
    DataSource dataSource;

    @Autowired
    TransactionManager transactionManager;

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Test
    void checkBean() {
        log.info("dataSource = {}", dataSource);
        log.info("transactionManager= {}", transactionManager);
        log.info("jdbcTemplate = {}", jdbcTemplate);

        assertThat(dataSource).isNotNull();
        assertThat(transactionManager).isNotNull();
        assertThat(jdbcTemplate).isNotNull();
    }
}

스프링 부트의 자동 구성

스프링 부트는 spring-boot-autoconfigure 라는 프로젝트 안에서 수 많은 자동 구성을 제공한다.

다음과 같은 자동 구성 기능들이 다음 빈들을 등록해준다.

스프링 부트가 제공하는 자동 구성(AutoConfiguration)

https://docs.spring.io/spring-boot/appendix/auto-configuration-classes/index.html