Skip to main content

Command Palette

Search for a command to run...

Bài 6: Spring Transaction Management

Published
3 min readView as Markdown

1. Định nghĩa và các khái niệm cơ bản về Transaction

Transaction là một đơn vị công việc được thực hiện với cơ sở dữ liệu, đảm bảo rằng tất cả các thao tác trong đơn vị đó được thực hiện thành công hoặc không thao tác nào được thực hiện. Điều này giúp bảo vệ tính toàn vẹn của dữ liệu. Các đặc điểm chính của transaction bao gồm:

  • Atomicity: Tất cả các thao tác trong transaction phải được thực hiện thành công hoặc không thao tác nào được thực hiện.

  • Consistency: Transaction phải chuyển hệ thống từ trạng thái nhất quán này sang trạng thái nhất quán khác.

  • Isolation: Các transaction phải hoạt động một cách độc lập, không ảnh hưởng đến nhau.

  • Durability: Khi transaction hoàn thành, các thay đổi phải được ghi lại một cách bền vững.

2. Cách cấu hình và quản lý Transaction trong Spring

Spring cung cấp hỗ trợ mạnh mẽ cho transaction management, bao gồm cả quản lý transaction lập trình (programmatic transaction management) và khai báo (declarative transaction management).

2.1. Cấu hình transaction management bằng XML

<!-- applicationContext.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx.xsd">

    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
        <!-- Cấu hình DataSource -->
    </bean>

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>

    <bean id="myService" class="com.example.MyService"/>
</beans>

2.2. Cấu hình transaction management bằng Java Annotations

// AppConfig.java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = "com.example")
public class AppConfig {
    @Bean
    public DataSource dataSource() {
        // Cấu hình DataSource
        return new BasicDataSource();
    }

    @Bean
    public DataSourceTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }

    @Bean
    public MyService myService() {
        return new MyService();
    }
}

// MyService.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class MyService {
    @Autowired
    private MyRepository myRepository;

    @Transactional
    public void performTransactionalOperation() {
        // Thực hiện các thao tác liên quan đến database
    }
}

3. Sử dụng @Transactional annotation

Annotation @Transactional được sử dụng để khai báo các phương thức hoặc lớp mà transaction management cần được áp dụng. Khi một phương thức hoặc lớp được đánh dấu bằng @Transactional, Spring sẽ tự động bắt đầu một transaction khi phương thức được gọi và commit hoặc rollback transaction dựa trên kết quả của phương thức.

Ví dụ:

// MyService.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class MyService {
    @Autowired
    private MyRepository myRepository;

    @Transactional
    public void performTransactionalOperation() {
        // Thực hiện các thao tác liên quan đến database
    }
}

4. Kết luận

Trong bài viết này, chúng ta đã tìm hiểu về Spring AOP (Aspect-Oriented Programming) và cách cấu hình AOP trong Spring, cùng với các khái niệm cơ bản về transaction management và cách cấu hình transaction trong Spring. Chúng ta cũng đã thấy cách sử dụng annotation @Transactional để quản lý các transaction một cách dễ dàng. Những kiến thức này giúp chúng ta xây dựng các ứng dụng Java mạnh mẽ, linh hoạt và dễ bảo trì.

Trong bài viết tiếp theo, chúng ta sẽ giới thiệu về Spring Boot, một framework mạnh mẽ và tiện lợi để phát triển các ứng dụng Java.

More from this blog

devngu

169 posts