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