Chỉnh sửa máy chủ của tập tin dữ liệu trong ứng dụng Tomcat mà không cần khởi động lại máy chủ?


10

Tôi đã chỉnh sửa tệp "server.xml" trong confthư mục của Tomcat 8 . Tôi đã thêm một Hostthẻ mới cho một trang web mới.

Tôi phải khởi động lại máy chủ Tomcat chứ?

Tôi có thể lấy Tomcat để phân tích cú pháp và áp dụng bản chỉnh sửa mới server.xmlkhông?



@dawud Cảm ơn vì liên kết, nhưng chúng ta đang nói về <Host>, không phải <Context>.
Basil Bourque

2
Bất kể, phần quan trọng là server.xmlđược phân tích cú pháp một lần khi khởi động. Nó không thể được tải lại mà không cần khởi động lại.
dawud

@dawud Cảm ơn. Tôi thấy rằng đề cập đến bây giờ. Tôi đã trả lời câu hỏi này để tôi có thể đóng Câu hỏi này.
Basil Bourque

Câu trả lời:


14

Tôi sẽ bắt đầu bằng cách nói rằng câu hỏi không được thực hiện hoàn toàn chính xác, vì hoàn toàn có thể chỉnh sửa tệp mà không cần khởi động lại Tomcat, nhưng các thay đổi bị bỏ qua trong quá trình chạy.

Câu hỏi thực sự sẽ là làm thế nào để áp dụng các thay đổi trong server.xmlmà không cần khởi động lại Tomcat.

Thu thập thông tin từ quá trình khởi động và các trang trình tải lớp trên tài liệu trực tuyến của Tomcat, có thể hiểu điều này chi tiết hơn.

Cụ thể hơn, nó được mô tả trong serverStartup.txtsơ đồ UML của quá trình khởi động và các phần có liên quan có thể được tóm tắt như sau:

Sequence 1. Start from Command Line
  ...
Sequence 2. Process command line argument (start, startd, stop, stopd)
Class: org.apache.catalina.startup.Bootstrap (assume command->start)
What it does:
a) Catalina.setAwait(true);
b) Catalina.load()
    b3) createStartDigester()
        Configures a digester for the main server.xml elements
    b4) Load the server.xml and parse it using the digester
        Parsing the server.xml using the digester is an automatic
        XML-object mapping tool, that will create the objects defined
        in server.xml
        Startup of the actual container has not started yet.
    b6) Calls initialize on all components, this makes each object
        register itself with the JMX agent.

Điều này xảy ra sau khi tạo trình nạp lớp Bootstrap của công cụ servlet (Catalina).

Với thông tin này, giờ đây rõ ràng khi trong quá trình khởi động, server.xmltệp được phân tích cú pháp, nhưng nó không thực sự trả lời câu hỏi tại sao bắt buộc phải khởi động lại Tomcat để áp dụng các thay đổi cho tệp này.

Câu trả lời là một số phần của nó có thể được sửa đổi linh hoạt khi chạy bằng JMX . Để có thể thực hiện được điều này, MBean thích hợp đã phải được đăng ký (b6 bước trên) và cũng phải chấp nhận các hoạt động SET (một số MBeans chỉ có giao diện GET).

Trong trường hợp cụ thể của bạn, không có cách nào để tạo và đăng ký Máy chủ mới khi chạy vì không có điều khoản nào cho nó và đây là lý do tại sao bạn phải khởi động lại quy trình Tomcat để trình tải lớp Bootstrap khởi tạo đối tượng đó và đăng ký với nó Đại lý JMX.

Sau đó, có thể sửa đổi máy chủ đó từ máy khách JMX, chẳng hạn như máy chủ jconsoleđi kèm với bất kỳ JDK nào.

Kết nối bạn jconsolevới Tomcat kích hoạt JMX và duyệt Host MBean để kiểm tra tất cả các thuộc tính có sẵn:

jconsole hiển thị các thuộc tính của Host MBean

và kiểm tra tất cả các hoạt động có sẵn (một trong số chúng được hiển thị dưới đây làm ví dụ):

jconsole hiển thị một hoạt động ví dụ trên Host MBean


1
+1 để giới thiệu tôi với JMX.
Raja Anbazhagan

7

Không cần khởi động lại.

Trang tài liệu Tomcat cho <Context>đề cập:

Có thể tải lại tệp conf / server.xml chính mà không cần khởi động lại Tomcat.


1
Những upvote đó nên vào @dawud ... không bình luận gì thêm. Câu trả lời không hay cho ai đó đã nói we’re talking about <Host>, not <Context>.-1 xin lỗi, rất hiếm khi tôi làm điều này, nhưng tôi phải ...
krisFR

@krisFR dawud được tự do viết Câu trả lời bất cứ lúc nào, sau đó hoặc ngay bây giờ. Không phải tất cả mọi người chơi trò chơi này để tăng phiếu.
Basil Bourque

1
@krisFR, Basil Bourque Tôi đã thêm một câu trả lời chi tiết hơn để trình bày điều này một cách tổng quát hơn. Hy vọng nó hữu ích.
dawud
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.