스프링부트 등장 이전에는 다음과 같이 데이터소스와 트랜잭션 매니저를 개발자가 직접 스프링 빈으로 등록해야 했다.
@Bean
DataSource dataSource() {
return new DriverManagerDataSource(URL, USERNAME, PASSWORD);
}
@Bean
PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
스프링부트는 이런 부분을 자동화하여 application.properties
설정 정보를 참고하여 데이터소스와 트랜잭션 매니저를 자동 등록해준다.
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.username=sa
spring.datasource.password=
스프링부트는 위와 같은 설정 정보를 참고하여 데이터 소스를 생성하고 스프링 빈으로 등록한다. 스프링부트가 기본으로 생성하는 데이터소스는 커넥션 풀을 제공하는 HikariDataSource이다. 그리고 spring.datasource.url
속성이 없으면 내장 데이터베이스(메모리 db)를 생성하려고 시도한다.
스프링부트는 적절한 트랜잭션 매니저(PlatformTransactionManager)를 자동으로 스프링 빈에 등록한다. 이때 등록되는 스프링 빈 이름은 transactionManager이다. 어떤 트랜잭션 매니저를 선택할지는 등록된 라이브러리를 보고 판단한다. JDBC 기술을 사용하면 DataSourceTransationManager를 빈으로 등록하고, JPA를 사용하면 JpaTransactionManger를 빈으로 등록한다. JDBC와 JPA를 둘 다 사용하는 경우에는 JpaTransactionManger를 등록한다. (JpaTransactionManger는 DataSourceTransationManager가 제공하는 기능을 대부분 지원한다.)
만약 개발자가 직접 트랜잭션 매니저를 빈으로 등록하면, 스프링부트는 트랜잭션 매니저를 자동으로 등록하지 않는다.