Spring Boot 트랜잭션 사용 상세 정보

4719 단어 springboot사무
spring Boot은 사무를 매우 간단하게 사용합니다. 먼저 주해 @EnableTransactionManagement를 사용하여 사무 지원을 시작한 후 데이터베이스에 접근하는 서비스 방법에 주해 @Transactional을 추가하면 됩니다.
사무 관리자에 관해서는 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 사무의 사용입니다. 여러분께 도움이 되었으면 합니다. 만약에 궁금한 것이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 여러분에게 회답할 것입니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기