스프링부트 - 자동 리소스

박찬우·2024년 2월 2일

스프링 DB

목록 보기
18/53

데이터소스 - 자동 등록

  • 스프링 부트는 데이터소스( DataSource )를 스프링 빈에 자동으로 등록한다.
  • 자동으로 등록되는 스프링 빈 이름: dataSource
  • 참고로 개발자가 직접 데이터소스를 빈으로 등록하면 스프링 부트는 데이터소스를 자동으로 등록하지 않는다.
  • application.properties 에 있는 속성을 사용해서 DataSource 를 생성한다
  • application.properties
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.username=sa
spring.datasource.password=
  • 스프링 부트가 기본으로 생성하는 데이터소스는 커넥션풀을 제공하는 HikariDataSource 이다. 커넥션풀과 관련된 설정도 application.properties 를 통해서 지정할 수 있다.
  • spring.datasource.url 속성이 없으면 내장 데이터베이스(메모리 DB)를 생성하려고 시도한다.

트랜잭션 매니저 - 자동 등록

  • 스프링 부트는 적절한 트랜잭션 매니저( PlatformTransactionManager )를 자동으로 스프링 빈에 등록한다.
  • 자동으로 등록되는 스프링 빈 이름: transactionManager
  • 참고로 개발자가 직접 트랜잭션 매니저를 빈으로 등록하면 스프링 부트는 트랜잭션 매니저를 자동으로 등록하지 않는다.
  • 어떤 트랜잭션 매니저를 선택할지는 현재 등록된 라이브러리를 보고 판단하는데, JDBC를 기술을 사용하면 DataSourceTransactionManager 를 빈으로 등록하고, JPA를 사용하면 JpaTransactionManager 를 빈으 로 등록한다. 둘다 사용하는 경우 JpaTransactionManager 를 등록한다. 참고로 JpaTransactionManagerDataSourceTransactionManager 가 제공하는 기능도 대부분 지원한다.

예)

  • application.properties
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.username=sa
spring.datasource.password=
  • TEST
    • DataSource를 주입 해준다
    • PlatformTransactionManager를 자동으로 주입해줌 @Transactional이 붙어있으면 프록시에서 등록되어 있는 transactionManager 찾아서 쓴다
@Slf4j
@SpringBootTest
class MemberServiceV3_4Test {

    ...

    @Autowired
    private MemberRepositoryV3 memberRepository;
    @Autowired
    private MemberServiceV3_3 memberService;

    @TestConfiguration
    @RequiredArgsConstructor
    static class TestConfig {

        private final DataSource dataSource;

        @Bean
        MemberRepositoryV3 memberRepositoryV3() {
            return new MemberRepositoryV3(dataSource);
        }

        @Bean
        MemberServiceV3_3 memberServiceV33() {
            return new MemberServiceV3_3(memberRepositoryV3());
        }
    }
	
	...
	
}
profile
진짜 개발자가 되어보자

0개의 댓글