Có ứng dụng mùa xuân (thực sự là ứng dụng grails) chạy máy chủ apache-activemq làm bean mùa xuân và vài tuyến apache-lạc đà. Ứng dụng sử dụng ngủ đông để làm việc với cơ sở dữ liệu. Vấn đề rất đơn giản. Activemq + Camel khởi động BEFORE
grails tiêm các phương thức đặc biệt vào các đối tượng miền ngủ đông (thực sự là lưu/cập nhật các phương thức, vv). Vì vậy, nếu activemq đã có một số dữ liệu khi khởi động - lạc đà bắt đầu xử lý các thông điệp với các phương thức grails DAO được tiêm. Điều này không thành công với grails.lang.MissingMethodException
. Phải trì hoãn khởi động activemq/camel trước khi Grails tiêm các phương thức đặc biệt vào các đối tượng miền.Làm thế nào để trì hoãn khởi động hạt đậu mùa xuân?
Trả lời
bạn có thể di chuyển MQ managment vào một plugin? Nó sẽ tăng tính mô đun và nếu bạn khai báo trong plugin-descriptor
def loadAfter = ['hibernate']
bạn nên có hành vi mong muốn. Hoạt động cho JBPM plugin
Nếu tất cả chúng được định nghĩa là đậu mùa xuân, bạn có thể sử dụng
<bean id="activeMqBean" depends-on="anotherBean" />
này sẽ đảm bảo anotherBean
được khởi tạo trước khi activeMqBean
Cảm ơn Bonzo, nhưng tôi biết câu lệnh 'phụ thuộc vào '. Thật không may nó sẽ không hoạt động như khởi tạo Grails là trên một số lớp khác nhau sau đó mùa xuân. Vì vậy, chỉ có không có bean mà activemq nên phụ thuộc vào. – Archer
Tôi không chắc chắn trong trường hợp của bạn nhưng tải chậm cũng có thể giúp ví dụ:
<bean id="lazybean" class="com.xxx.YourBean" lazy-init="true">
Đậu lười được khởi tạo chỉ ra vùng chứa IoC để tạo cá thể đậu khi được yêu cầu lần đầu tiên. Điều này có thể giúp bạn trì hoãn việc tải đậu bạn muốn.
Điều này sẽ không hoạt động, vì hạt DAO của tôi chắc chắn được yêu cầu TRƯỚC KHI hibernate được tải. – Archer
Tôi biết câu hỏi này là khá cũ, nhưng bây giờ tôi đang đối mặt với cùng một vấn đề trong năm 2015 - và chủ đề này không cung cấp một giải pháp cho tôi.
Tôi đã đưa ra một bean xử lý tùy chỉnh có một CountDownLatch, mà tôi đếm ngược sau khi khởi động ứng dụng. Vì vậy, các tin nhắn sẽ được nhàn rỗi cho đến khi ứng dụng đã bắt đầu đầy đủ và nó làm việc cho tôi.
/**
* bootstrap latch processor
*/
@Log4j
class BootstrapLatchProcessor implements Processor {
private final CountDownLatch latch = new CountDownLatch(1)
@Override
void process(Exchange exchange) throws Exception {
if(latch.count > 0){
log.info "waiting for bootstrapped @ ${exchange.fromEndpoint}"
latch.await()
}
exchange.out = exchange.in
}
/**
* mark the application as bootstrapped
*/
public void setBootstrapped(){
latch.countDown()
}
}
Sau đó, sử dụng nó như một bean trong ứng dụng của bạn và gọi phương thức setBootstrapped trong Bootstrap.groovy bạn
Sau đó, trong RouteBuilder của bạn, bạn đặt bộ xử lý giữa thiết bị đầu cuối và điểm đến của bạn cho tất cả các tuyến đường mà bạn mong đợi thông điệp đến trước khi ứng dụng đã bắt đầu:
from("activemq:a.in ").processRef('bootstrapProcessor').to("bean:handlerService?method=handle")
- 1. Yêu cầu khởi tạo hạt đậu mùa xuân
- 2. Trì hoãn khởi động trễ
- 3. Truy cập các hạt đậu mùa xuân ở JerseyTest
- 4. Mùa xuân - Làm thế nào tôi có thể phá hủy hạt đậu nguyên mẫu?
- 5. Tạo hạt đậu mùa xuân nguyên mẫu với chú thích?
- 6. Mùa xuân Không có hạt đậu độc đáo loại
- 7. Mùa xuân: Làm thế nào để làm sạch chấm dứt đậu nguyên mẫu?
- 8. cấu hình đậu mùa xuân
- 9. Mùa xuân AOP tạo thêm đậu
- 10. Mùa xuân - bắt đậu tạo ngoại lệ
- 11. Làm thế nào để trì hoãn Default.png?
- 12. Làm thế nào tôi có thể nhận được một danh sách các hạt đậu ngay lập tức từ mùa xuân?
- 13. Tiêm đậu mùa xuân bằng CDI @Inject
- 14. Phạm vi yêu cầu mùa xuân đậu
- 15. Mùa xuân - tiêm 2 hạt cùng loại
- 16. Nhập hạt đậu mùa xuân từ các mô-đun Maven khác bên trong một WAR?
- 17. bean mùa xuân với giá trị hàm khởi tạo động
- 18. tải đậu mùa xuân vào một servlet
- 19. Làm thế nào để tiêm đậu mùa xuân vào một JSP 2.0 SimpleTag?
- 20. Làm thế nào để có được một HttpServletRequest trong đậu mùa xuân của tôi?
- 21. In tất cả các hạt đậu Xuân được nạp
- 22. Truy cập vào tất cả các hạt đậu mùa xuân thuộc một loại nhất định
- 23. Danh sách các loại đậu mùa xuân theo loại
- 24. Làm cách nào để xử lý đồng thời đậu mùa xuân
- 25. mùa xuân: làm thế nào để bỏ qua đặc @Autowired nếu đậu không được định nghĩa
- 26. Đậu mùa xuân - làm thế nào để dây null như một nhà xây dựng arg?
- 27. Làm thế nào để tải tất cả đậu lười biếng với @ComponentScan trong mùa xuân?
- 28. hibernate-envers RevisionListener mùa xuân hội nhập như đậu mùa xuân
- 29. Phương pháp tiêu diệt hạt đậu mùa xuân, singleton và nguyên mẫu
- 30. Mùa xuân: làm thế nào để khởi tạo một bean Spring có tham số thời gian chạy?
Vâng, trung thực tôi sẽ KHÔNG tạo/duy trì plugin riêng biệt chỉ để khởi động AMQ sau khi ngủ đông được tải. Tôi chắc chắn rằng có cách tốt hơn. – Archer
cũng trong plugin grails là thành phần. Tôi đã phát triển một số plugin cho các ứng dụng chỉ vì tôi nghĩ rằng chúng sẽ được mô đun hóa tốt hơn. Plugin cũng là một cách hữu ích để tích hợp dữ liệu hoặc hệ thống kế thừa. Bạn duy trì chúng khi bạn duy trì ứng dụng. Bạn không cần phải thả chúng vào tự nhiên. – Sammyrulez
Tôi đã có nó;) Nhưng trong mọi trường hợp - tôi sẽ KHÔNG di chuyển tệp khởi tạo activemq.xml duy nhất từ ứng dụng chính sang một 'thành phần' khác với cấu trúc dự án plugin grails hoàn chỉnh, đăng nó lên svn và duy trì một loạt các nguồn khác trì hoãn khởi tạo AMQ. Có cách đơn giản hơn. AMQ bean hỗ trợ 'start' tài sản mà chỉ ra nó nên được tự khởi động hay không. Sẽ sử dụng nó như bây giờ. – Archer