2017-08-30 35 views
10

Vì vậy, tôi có một tập tin application.yml cho các ứng dụng khởi động mùa xuân của tôi như vậy:mùa xuân ước Boot cho biến

spring: 
    url: localhost 
email: 
    from: [email protected] 
app: 
    uuid: 3848348j34jk2dne9 

Tôi muốn dây các thuộc tính cấu hình thành các thành phần khác nhau trong ứng dụng của tôi như vậy:

@Component 
public class FooA { 
    private final String url; 

    public FooA(@Value("${spring.url}") String url) { 
     this.url = url 
    } 
} 

@Component 
public class FooB { 
    private final String from; 

    public FooA(@Value("${email.from}") String from) { 
     this.from = from 
    } 
} 

@Component 
public class FooC { 
    private final String uuid; 

    public FooA(@Value("${app.uuid}") String uuid) { 
     this.uuid = uuid 
    } 
} 

Các tác phẩm trên như dự định trong đơn đăng ký của tôi. Nhưng câu hỏi của tôi là nếu đây là thực hành tốt nhất trong khởi động mùa xuân. Chỉ có một lựa chọn khác mà tôi biết là sử dụng đối tượng Properties bằng cách tạo một bean bên trong một lớp cấu hình, nạp các thuộc tính với tất cả các biến cấu hình và tự động biến bean thuộc tính thành các thành phần.

Thực tiễn tốt nhất trong trường hợp này là gì?

Trả lời

17

Như bạn đã xác định hai lựa chọn chính cho cấu hình tiêm đang sử dụng @Value trên các thuộc tính riêng lẻ hoặc @ConfigurationProperties trên đối tượng cấu hình javabean.

Bạn sử dụng tùy chọn nào bạn muốn. Cá nhân tôi thích sử dụng một đối tượng cấu hình.

Sử dụng @ConfigurationProperties cho phép bạn sử dụng xác thực bean JSR-303.
Bạn cũng có thể viết xác nhận tùy chỉnh của riêng bạn trong setter của javabean của bạn nếu bạn muốn.
Bạn có thể chú thích các hạt cấu hình từ các dự án không phải mùa xuân, cho phép bạn viết các thư viện được cấu hình dễ dàng nhưng không phụ thuộc vào mùa xuân.
Bạn có thể tạo siêu dữ liệu IDE từ các đối tượng có thể làm cho quá trình phát triển của bạn mượt mà hơn.

Dưới đây là một số phương pháp tôi khuyên bạn nên sử dụng khi cấu hình lò xo.

  • Tạo cá nhân @ConfigurationProperties đối tượng cho các thành phần logic của ứng dụng của bạn. Cố gắng giữ cho mọi thứ theo mô-đun và tránh tạo ra một nền tảng bán phá giá cho toàn bộ cấu hình ứng dụng của bạn.

  • Không sử dụng cùng một thuộc tính @Value ở nhiều vị trí.
    Nếu cùng một cấu hình là cần thiết ở nhiều nơi trong ứng dụng của bạn thì có lẽ bạn nên di chuyển giá trị vào một đối tượng cấu hình.
    Sử dụng cùng một thuộc tính trên nhiều @Value chú thích khiến bạn khó khăn hơn và cũng có thể gây ra hành vi không mong muốn nếu bạn xác định giá trị mặc định bằng biểu thức "Spel" ở một nơi chứ không phải biểu tượng kia.

  • Không xác định thuộc tính của riêng bạn trong không gian tên spring.
    Ví dụ: spring.url thuộc tính is not one of the properties defined in the documentation.
    Bằng cách sử dụng cùng một không gian tên, bạn có thể gặp nguy cơ tên đó đang được sử dụng cho một thứ gì đó trong các phiên bản khởi động trong tương lai.

+0

Tôi không nghĩ rằng Richard đang cân nhắc việc sử dụng '@ConfigurationProperties'. Cách tôi đọc câu hỏi của anh ấy, anh ấy đang xem xét việc tạo và điền một bean bằng tay trong lớp '@Configuration' của mình. Vì vậy, '@ConfigurationProperties' sẽ là một cải tiến lớn.Ngoài ra, nếu bạn thêm bộ xử lý cấu hình khởi động mùa xuân, bạn có thể tạo siêu dữ liệu cấu hình cho các IDE, để tự động hoàn thành/xác nhận/tài liệu, điều này khá tuyệt! –

Các vấn đề liên quan