@ConfigurationProperties annotation là gì

0 phút đọc

Spring Boot giúp bạn dễ dàng cấu hình ứng dụng từ bên ngoài và truy xuất các thông tin cấu hình này một cách tiện lợi. Trong bài viết này, chúng ta sẽ tìm hiểu về @ConfigurationProperties, một annotation quan trọng trong Spring Boot, cung cấp một cách khoa học để quản lý cấu hình của ứng dụng. Bây giờ, chúng ta sẽ đi sâu hơn vào việc quản lý cấu hình ứng dụng.

Cài Đặt

Để sử dụng @ConfigurationProperties, chúng ta cần thêm dependency cho Spring Boot Web vào file pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Cấu Hình Đơn Giản

Giả sử bạn muốn ứng dụng của mình có một số giá trị toàn cục, chẳng hạn như email và ID của Google Analytics, mà bạn muốn lưu chúng ở bên ngoài ứng dụng để dễ dàng thay đổi. Để làm điều này, bạn có thể sử dụng @ConfigurationProperties.

Chúng ta sẽ tạo một class KungfutechAppProperties chứa các thông tin này:

@Data
@Component
@ConfigurationProperties(prefix = "kungfutech")
public class KungfutechAppProperties {
    private String email;
    private String googleAnalyticsId;
}

Trong đoạn code trên:

  • @Component: Đánh dấu class này là một Spring bean, cho phép Spring quản lý nó.

  • @ConfigurationProperties: Đánh dấu class bên dưới nó là một properties class. Các thuộc tính trong class này sẽ tự động nạp giá trị từ cấu hình ứng dụng.

Lưu ý: Các thuộc tính trong class phải có các setter method tương ứng.

Để kích hoạt tính năng này, bạn cần thêm annotation @EnableConfigurationProperties vào một configuration nào đó trong ứng dụng. Thường là annotation này được gắn lên hàm main của ứng dụng:

@SpringBootApplication
@EnableConfigurationProperties
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

Sau đó, bạn cần tạo một file application.yml trong thư mục resources để chứa cấu hình:

kungfutech:
  email: techmely.creation@gmail.com
  googleAnalyticsId: U-xxxxx

Sử Dụng Cấu Hình

Bây giờ, bạn có thể sử dụng KungfutechAppProperties để truy xuất các giá trị cấu hình từ bên ngoài ứng dụng một cách dễ dàng. Ví dụ:

@Autowired KungfutechAppProperties kungfutechAppProperties;

public void someMethod() {
    System.out.println("Email: " + kungfutechAppProperties.getEmail());
    System.out.println("Google Analytics ID: " + kungfutechAppProperties.getGoogleAnalyticsId());
}

Các giá trị cấu hình này sẽ tự động được nạp vào các thuộc tính tương ứng trong KungfutechAppProperties từ file application.yml.

Nested Properties

Bạn có thể cấu hình các thuộc tính bên trong class, kể cả khi chúng là các danh sách (Lists), bản đồ (Maps) hoặc một class khác. Ví dụ:

@Data
@Component
@ConfigurationProperties(prefix = "kungfutech")
public class KungfutechAppProperties {
    private String email;
    private String googleAnalyticsId;
    private List<String> authors;
    private Map<String, String> exampleMap;
}

Và cấu hình trong file application.yml:

kungfutech:
  email: techmely.creation@gmail.com
  googleAnalyticsId: U-xxxxx
  authors:
    - kungfutech
    - atom
  exampleMap:
    key1: hello
    key2: world

Khi bạn sử dụng KungfutechAppProperties, các thuộc tính authorsexampleMap sẽ chứa các giá trị từ cấu hình tương ứng.

Avatar TechMely Team
Được viết bởi

TechMely Team

Muốn đổi thói quen, phải thay hành động.