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.xml
mà 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.txt và sơ đồ 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.xml
tệ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 jconsole
vớ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:
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ụ):