programing

@Spring Boot에서의 트랜잭션 관리 활성화

golfzon 2023. 3. 5. 10:50
반응형

@Spring Boot에서의 트랜잭션 관리 활성화

@EnableTransactionManagement필요한가요?조사를 좀 해봤어요Spring Boot은 이미 활성화 되어 있기 때문에 사용자가 명시적으로 사용해야 한다고 말하는 사람도 있습니다.그래, 어때?

Spring Data도 사용하고 있을 것입니다.Spring 데이터 저장소의 콜은 디폴트로 트랜잭션으로 둘러싸여 있습니다.@EnableTransactionManagementSpring Data가 기존 트랜잭션을 발견하면 기존 트랜잭션이 재사용되고, 그렇지 않으면 새로운 트랜잭션이 생성됩니다.

@Transactional그러나, 사용자 자신의 코드 내의 주석은 다음과 같은 경우에만 평가됩니다.@EnableTransactionManagement활성화(또는 설정된 트랜잭션을 처리하는 다른 방법).

트랜잭션 동작을 추적하려면 다음 속성을 다음 위치에 추가합니다.application.properties:

logging.level.org.springframework.transaction.interceptor=TRACE

(로그에 스프링 트랜잭션 표시 참조)

> https://spring.io/guides/gs/managing-transactions/에 따르면

Spring Boot은 클래스 경로 및 h2에서 spring-jdbc를 검출하여 자동으로 DataSource와 JdbcTemplate를 만듭니다.이러한 인프라스트럭처를 이용할 수 있게 되어 전용 설정이 없기 때문에 Data Source Transaction Manager도 생성됩니다.이것은 @Transactional 주석 메서드를 대행 수신하는 컴포넌트입니다.

또한 spring-boot-starter-actuator를 사용하여 컨텍스트에서 작성된 콩을 나열할 수도 있습니다.

bean" : "transaction Manager"

오래된 작은 게시물이지만, 제가 검색했을 때 이전에 받은 답변은 간단하지 않았습니다.

@EnableTransactionManagementspring-data* 또는 spring-tx가 클래스 패스에 있는 경우 스프링 부트에서는 옵션입니다.어떻게 작동합니까?이하와 같습니다.

스프링 부트는 클래스 경로에 spring-boot-autoconfigure.jar를 추가합니다.META-INF의 spring.factories 파일에 접속하면org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration거기에 기입해 주세요.트랜잭션 자동 설정이 초기화됩니다.

클래스에는 다음 행이 있습니다(스니펫).

@Configuration
@ConditionalOnClass({PlatformTransactionManager.class})
@AutoConfigureAfter({JtaAutoConfiguration.class, HibernateJpaAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, Neo4jDataAutoConfiguration.class})
@EnableConfigurationProperties({TransactionProperties.class})
public class TransactionAutoConfiguration {
..
}

봐주세요TransactionAutoConfiguration거래 지원을 가능하게 하는 것을 확인합니다.PlatformTransactionManager는 클래스 경로에서 사용할 수 있습니다. EnableTransactionManagementConfiguration이 설정도 되어 있습니다.

아니요.@EnableTransactionManagement는 디폴트로 켜져 있습니다.https://github.com/jkubrynski/spring-boot/commit/9d219ef7a004c58a88bbbef82a520a22961c9402 를 참조해 주세요.

@EnableTransactionManagement는 클래스 패스에 추가한 의존관계 자에 따라 조건부로 온/오프됩니다.spring data jpa starter를 사용하면 전원이 켜집니다.

중 ★★★★★★★★★★★★★★.org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration1.5 스프링 부트 1.5+)가.

    @Configuration
    @EnableTransactionManagement(proxyTargetClass = false)
    @ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "false", matchIfMissing = false)
    public static class JdkDynamicAutoProxyConfiguration {

    }

    @Configuration
    @EnableTransactionManagement(proxyTargetClass = true)
    @ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "true", matchIfMissing = true)
    public static class CglibAutoProxyConfiguration {

    }

은 "Default"spring.aop.proxy-target-class=trueCGLIB를 사용하다프록시를 는, JDK 를 합니다.spring.aop.proxy-target-class=false★★★★★★ 。

언급URL : https://stackoverflow.com/questions/40724100/enabletransactionmanagement-in-spring-boot

반응형