Tomcat java.net.BindException: כתובת כבר בשימוש שגיאה ב- Java

1. סקירה כללית

במדריך מהיר זה נבדוק מה גורם למשותף שגיאת java.net.BindingException: הכתובת כבר בשימוש שגיאה ואיך נוכל להתמודד עם זה.

2. מתי מתרחשת השגיאה?

כידוע, שרת Apache Tomcat, כברירת מחדל, משתמש ביציאת 8080.

מספרי הנמל נעים בין 0 ל -65535, עם זאת, יציאה יכולה להיות תפוסה רק על ידי יישום יחיד בכל עת.

היוצא מן הכלל קובע כי היישום מנסה להשתמש ביציאה שכבר נלקחה על ידי תהליך אחר, או שלא הפסקנו כראוי את שרת Tomcat.

3. אבחון

כדי לפתור שגיאה זו, אנו יכולים להרוג את השירות הנוטל את היציאה הזו או לשנות את שרת האינטרנט שלנו כך שיפעל ביציאה אחרת.

3.1. גילוי הקונפליקט

במקרה זה, עלינו לברר איזו יישום משתמש ביציאה.

ה netstat ניתן להשתמש בפקודה לגילוי חיבורי TCP / IP נוכחיים.

להלן הפקודות בהן ניתן להשתמש כדי למצוא ולהרוג את התהליך בסביבות שונות.

ב- Windows, העמודה האחרונה של הפלט תתן לנו את מזהה התהליך של השירות הפועל כעת ב- 8080:

netstat -ano | מצא "8080"

תְפוּקָה:

TCP 0.0.0.0:8080 0.0.0.0:0 האזנה 21376 

הנה, 21376 הוא מזהה התהליך של התהליך שמאזין ביציאה 8080.

בסביבת יוניקס / לינוקס:

מכנסיים נטסטאט | grep "8080"

תְפוּקָה:

TCP 0.0.0.0:8080 0.0.0.0:0 האזנה 21376 

זהה לפלט של Windows. הנה, 21376 הוא מזהה התהליך של התהליך שמאזין ביציאה 8080.

ב- Mac OS X:

lsof -t -i: 8080

תְפוּקָה:

21376

הוא יציג את ה- PID בלבד.

3.2. הפעלת שרת בנמל אחר

אם אנו יודעים איזה תהליך פועל, מדוע הוא פועל וכי עליו לפעול ביציאה זו, אנו יכולים לשנות את היציאה שאפליקציית השרת שלנו מנסה להפעיל.

כדי לשנות את יציאת Tomcat, עלינו לערוך את ה- server.xml קוֹבֶץ. כדי לעשות זאת:

  • לִפְתוֹחַ tomcat / conf תיקיה
  • לַעֲרוֹך server.xml
  • החלף את ה יציאת מחבר עם ה נמל חדש
  • הפעל מחדש את שרת tomcat

ה server.xml הקובץ נראה כך:

עכשיו Tomcat יפעל בנמל המותאם אישית.

3.3. הורג את שירות הריצה

כדי לעצור את תהליך הריצה, אנו יכולים להשתמש ב- לַהֲרוֹג פקודה.

באמצעות מזהה התהליך שמצאנו ב- 3.1. נצטרך פקודות שונות בהתאם למערכת ההפעלה שאנו מריצים.

בסביבת Windows:

taskkill / F / PID 21376

בסביבת יוניקס / לינוקס:

להרוג - 21376

סביבת Mac OS X:

להרוג -9 21376

4. מסקנה

כאמור בתחילת המאמר, java.net.BindingException היא שגיאה נפוצה אך נפתרת בקלות.

הקושי העיקרי הוא למצוא את השירות המתנגש באמצעות הנמל עם ה- netstat ואז להחליט על דרך הפעולה המתאימה.

לאחר שהתגלה, התיקון קל.