2009-02-27 36 views
5

Tôi đang sử dụng Spring 2.5.6. Tôi có một bean có thuộc tính đang được gán từ một tập tin thuộc tính thông qua một PropertyPlaceholderConfigurer. Tôi tự hỏi liệu có thể có thuộc tính của bean được cập nhật khi tệp thuộc tính được sửa đổi hay không. Sẽ có ví dụ một số quy trình định kỳ kiểm tra ngày sửa đổi cuối cùng của tệp thuộc tính và nếu nó đã thay đổi, hãy tải lại bean.Có thuộc tính bean bean được làm mới tự động từ các tệp thuộc tính

Tôi tự hỏi liệu đã có điều gì đó đáp ứng các yêu cầu của tôi chưa. Nếu không, cách tiếp cận tốt nhất để giải quyết vấn đề này là gì?

Cảm ơn sự giúp đỡ của bạn.

Trả lời

3

Cũng có thể xem xét việc sử dụng PropertyOverrideConfigurer của Spring. Có thể đọc lại các thuộc tính và áp dụng lại nó trong một số hạt bỏ phiếu/lịch biểu.

Điều đó phụ thuộc vào cách thức các bean được định cấu hình thực tế sử dụng các thuộc tính này. Họ có thể, ví dụ, gián tiếp cache chúng ở đâu đó.

+0

Dường như đây là cách tiếp cận đơn giản nhất và là những gì chúng tôi sẽ làm. Cảm ơn –

+0

Tôi không thấy sự khác biệt giữa PropertyOverrideConfigurer và PropertyPlaceholderConfigurer trong khía cạnh đó. Có sự khác biệt như thế nào các thuộc tính được chỉ định, nhưng cả hai được áp dụng chỉ một lần như một BeanFactoryPostProcessor trước khi các bean thực tế được tạo ra. Làm thế nào chould họ được áp dụng lại? –

+0

@hstoerr: Với một PropertyPlaceholderConfigurer các thiết lập được 'ẩn' bên trong cấu hình mùa xuân (xml) (với biểu thức {..}). Với PropertyOverrideConfigurer, cấu hình có định dạng beanName.property = value. Vì vậy, điều này có thể được áp dụng lại trên đậu cũ (ví dụ: PropertyOverrideConfigurer.processProperties – jor

0

Một cách để làm điều này là nhúng bảng điều khiển groovy vào ứng dụng của bạn. Here's một số hướng dẫn. Họ rất đơn giản để làm, btw - đã cho tôi rất ít thời gian mặc dù tôi không quen thuộc với groovy.

Khi bạn làm điều đó, bạn có thể chỉ cần đi vào bảng điều khiển và thay đổi giá trị bên trong ứng dụng trực tiếp khi đang di chuyển.

2

Nếu bạn muốn các thuộc tính động trong thời gian chạy, có lẽ một cách khác để làm điều đó là JMX.

0

Bạn có thể thử sử dụng phạm vi tùy chỉnh cho bean sẽ tạo lại các hạt đậu trên các thay đổi của tệp thuộc tính. Xem số more extensive answer here của tôi.

0

Spring Cloud Config có cơ sở để thay đổi thuộc tính cấu hình khi chạy qua Spring Cloud Bus và sử dụng Cloud Config Server. Các tệp cấu hình hoặc tệp .properties hoặc .yml được "externalized" từ ứng dụng Spring và được truy xuất từ ​​Spring Cloud Config Server mà ứng dụng kết nối khi khởi động. Máy chủ Cloud Config đó truy xuất tệp cấu hình thích hợp .properties hoặc .yml từ một repo GIT (có các giải pháp lưu trữ khác, nhưng GIT là phổ biến nhất). Sau đó, bạn có thể thay đổi cấu hình trong thời gian chạy bằng cách thay đổi nội dung của các tệp cấu hình của GIT repo - Máy chủ cấu hình Cloud phát các thay đổi cho bất kỳ ứng dụng Client Spring nào thông qua Spring Cloud Bus và cấu hình của các ứng dụng đó được cập nhật mà không cần khởi động lại ứng dụng. Bạn có thể tìm thấy một ví dụ đơn giản làm việc tại đây: https://github.com/ldojo/spring-cloud-config-examples

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