Tomcat java.net.BindException: Lỗi địa chỉ đã được sử dụng trong Java

1. Khái quát chung

Trong hướng dẫn nhanh này, chúng ta sẽ xem xét nguyên nhân gây ra lỗi java.net.BindingException phổ biến : Lỗi địa chỉ đã sử dụng và cách chúng ta có thể giải quyết nó.

2. Khi Lỗi Xảy Ra?

Như chúng ta đã biết, máy chủ Apache Tomcat, theo mặc định, sử dụng cổng 8080.

Số cổng nằm trong khoảng từ 0 đến 65535, tuy nhiên, một cổng chỉ có thể được sử dụng bởi một ứng dụng bất kỳ lúc nào .

Ngoại lệ nói rằng ứng dụng đang cố gắng sử dụng một cổng đã được thực hiện bởi một số quy trình khác hoặc chúng tôi đã không dừng máy chủ Tomcat đúng cách.

3. Chẩn đoán

Để giải quyết lỗi này, chúng tôi có thể loại bỏ dịch vụ sử dụng cổng đó hoặc có thể thay đổi máy chủ web của chúng tôi để chạy trên cổng khác.

3.1. Khám phá xung đột

Trong trường hợp này, chúng ta cần tìm ra ứng dụng đang sử dụng cổng.

Lệnh netstat có thể được sử dụng để phát hiện các kết nối TCP / IP hiện tại.

Dưới đây là các lệnh có thể được sử dụng để tìm và kết thúc quá trình trong các môi trường khác nhau.

Trên Windows, cột đầu ra cuối cùng sẽ cung cấp cho chúng ta id quy trình của dịch vụ hiện đang chạy trên 8080:

netstat -ano | find "8080"

Đầu ra:

TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 21376 

Ở đây, 21376 là id tiến trình của tiến trình đang lắng nghe trên cổng 8080.

Trên môi trường Unix / Linux :

netstat -pant | grep "8080"

Đầu ra:

TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 21376 

Giống như đầu ra của Windows. Ở đây, 21376 là id tiến trình của tiến trình đang lắng nghe trên cổng 8080.

Trên Mac OS X:

lsof -t -i :8080

Đầu ra:

21376

Nó sẽ chỉ hiển thị PID.

3.2. Chạy máy chủ trên một cổng khác

Nếu chúng ta biết quá trình nào đang chạy, tại sao nó đang chạy và nó cần phải chạy trên cổng đó, chúng ta có thể thay đổi cổng mà ứng dụng máy chủ của chúng ta đang cố gắng chạy.

Để thay đổi cổng Tomcat, chúng ta cần chỉnh sửa tệp server.xml . Để làm điều này:

  • Mở thư mục tomcat / conf
  • chỉnh sửa server.xml
  • thay thế cổng kết nối bằng cổng mới
  • khởi động lại máy chủ tomcat

Tệp server.xml trông giống như sau:

Bây giờ Tomcat sẽ chạy trên cổng tùy chỉnh.

3.3. Giết dịch vụ đang chạy

Để dừng quá trình đang chạy, chúng ta có thể sử dụng lệnh kill .

Sử dụng ID quy trình mà chúng tôi tìm thấy trong 3.1., Chúng tôi sẽ yêu cầu các lệnh khác nhau tùy thuộc vào Hệ điều hành mà chúng tôi đang chạy.

Trên môi trường Windows:

taskkill /F /PID 21376

Trên môi trường Unix / Linux:

kill - 21376

Môi trường Mac OS X:

kill -9 21376

4. Kết luận

Như đã đề cập ở đầu bài viết, java.net.BindingException là một lỗi phổ biến nhưng dễ giải quyết.

Khó khăn chính là tìm kiếm dịch vụ xung đột bằng cách sử dụng cổng với ứng dụng đầu cuối netstat, sau đó quyết định hướng hành động thích hợp.

Sau khi phát hiện ra, việc sửa chữa rất dễ dàng.