Spring Boot 트랜잭션 사용 상세 정보
4719 단어 springboot사무
사무 관리자에 관해서는 JPA든 JDBC 등이든 인터페이스 PlatformTransactionManager를 실현합니다. 만약spring-boot-starter-jdbc 의존을 추가한다면 프레임워크는 기본적으로 DataSourceTransactionManager의 실례를 주입합니다.만약spring-boot-starter-data-jpa 의존을 추가한다면, 프레임워크는 기본적으로 JpaTransactionManager 실례를 주입합니다.
시작 클래스에 다음과 같은 방법을 추가할 수 있습니다. Debug 테스트를 통해 자동으로 주입되는 것이 PlatformTransactionManager 인터페이스의 어떤 실현 클래스인지 알 수 있습니다.
@EnableTransactionManagement // , xml <tx:annotation-driven />
@SpringBootApplication
public class ProfiledemoApplication {
@Bean
public Object testBean(PlatformTransactionManager platformTransactionManager){
System.out.println(">>>>>>>>>>" + platformTransactionManager.getClass().getName());
return new Object();
}
public static void main(String[] args) {
SpringApplication.run(ProfiledemoApplication.class, args);
}
}
이 SpringBoot들은 우리를 위해 자동으로 만들어졌습니다. 이것은 우리에게 투명하지 않습니다. 만약 프로젝트가 비교적 크고 지속적인 의존이 비교적 많다면, 우리는 인위적으로 어떤 사무 관리자를 사용할 것인지를 선택할 것입니다.코드는 다음과 같습니다.
@EnableTransactionManagement
@SpringBootApplication
public class ProfiledemoApplication {
// dataSource
@Bean
public PlatformTransactionManager txManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public Object testBean(PlatformTransactionManager platformTransactionManager) {
System.out.println(">>>>>>>>>>" + platformTransactionManager.getClass().getName());
return new Object();
}
public static void main(String[] args) {
SpringApplication.run(ProfiledemoApplication.class, args);
}
}
스프링 용기에서 수동 메모 @Bean이 우선적으로 불러옵니다. 프레임워크는 다른 PlatformTransactionManager 구현 클래스를 다시 실례화하지 않습니다.그리고 서비스에서 @Transactional 주석을 받는 방법은 업무를 지원합니다.클래스에 주석을 달면, 모든 클래스의 방법은 기본적으로 업무를 지원합니다.
같은 프로젝트에 여러 개의 사무 관리자가 존재하는데 어떻게 처리해야 하는지는 아래의 실례를 보시고 코드의 주석을 보십시오.
@EnableTransactionManagement // , xml <tx:annotation-driven />
@SpringBootApplication
public class ProfiledemoApplication implements TransactionManagementConfigurer {
@Resource(name="txManager2")
private PlatformTransactionManager txManager2;
// 1
@Bean(name = "txManager1")
public PlatformTransactionManager txManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
// 2
@Bean(name = "txManager2")
public PlatformTransactionManager txManager2(EntityManagerFactory factory) {
return new JpaTransactionManager(factory);
}
// TransactionManagementConfigurer ,
@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
return txManager2;
}
public static void main(String[] args) {
SpringApplication.run(ProfiledemoApplication.class, args);
}
}
@Component
public class DevSendMessage implements SendMessage {
// value
@Transactional(value="txManager1")
@Override
public void send() {
System.out.println(">>>>>>>>Dev Send()<<<<<<<<");
send2();
}
// , value
// annotationDrivenTransactionManager()
@Transactional
public void send2() {
System.out.println(">>>>>>>>Dev Send2()<<<<<<<<");
}
}
주:스프링 용기에 여러 개의 PlatformTransactionManager 실례가 존재하고 인터페이스 TransactionManagementConfigurer가 기본값을 지정하지 않았다면, 우리가 방법적으로 주해 @Transactional을 사용할 때value로 지정해야 합니다. 지정하지 않으면 이상이 발생합니다.
시스템에 기본 사무 관리를 제공해야 하는 상황에서 인터페이스 Transaction Management Configurer 지정을 실현합니다.
어떤 시스템은 불필요한 문제를 피하기 위해 업무에서 @Transactional의value 값을 명확하게 지정해야 하는 경우.인터페이스 Transaction Management Configurer를 실현하는 것을 권장하지 않습니다. 이렇게 하면 컨트롤러가 명확하게 이상을 던지고 개발자가 주동적으로 지정하는 것을 잊지 않습니다.
참조:
SpringBoot의 트랜잭션 관리 상세 정보
Spring Boot 빠른 시작 가이드
Spring Boot 빠른 시작 자습서
위에서 말한 것은 편집자가 여러분께 소개한 Spring Boot 사무의 사용입니다. 여러분께 도움이 되었으면 합니다. 만약에 궁금한 것이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 여러분에게 회답할 것입니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin Springboot -- 파트 14 사용 사례 REST로 전환하여 POST로 JSON으로 전환前回 前回 前回 記事 の は は で で で で で で を 使っ 使っ 使っ て て て て て リクエスト を を 受け取り 、 reqeustbody で 、 その リクエスト の ボディ ボディ を を 受け取り 、 関数 内部 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.