วิธีหา process id ของ executable jar/war ก็มีหลายวิธี
- ใช้ command line `ps -ef|grep {ชื่อ file ของเรา}
- เปิด log file ดู (ถ้า config พวก log4j เอาไว้) เวลา SpringApplication เริ่มทำงานมันก็จะบอกว่า process id ที่มันได้คือเลขอะไร i.e.:
...Starting FooApplication v0.1.0 on dahoba-laptop with PID 15840 ...
- ใช้ Spring Boot Actuator ให้มันสร้าง pid ไฟล์ให้เรา
วิธีการทำ
- ใส่ dependency Spring Boot Actuator ก่อน
reference #39
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
Note: วิธี extend META-INF/spring.factories
ยังทำให้ผมสับสน หรือใช้ SpringApplication.addListeners(…)
มันไม่ work แฮะ (ผมยังใช้ไม่เป็น :-( )ผมทำแบบนี้ ใช้ได้เหมือนกัน
- สร้างไฟล์ application.properties ขึ้นมาใน classpath i.e.: src/main/resources/application.properties
- เพิ่ม line
context.listener.classes
นี้เข้าไป - ทางขวา value เป็น comma separate ใส่ class อื่นๆ ได้อีก
...
context.listener.classes = org.springframework.boot.actuate.system.ApplicationPidFileWriter
...
ที่นี้พอ execute jar/war ที่ package ใหม่หลังจาก ใส่ properties กับ dependency เข้าไปแล้ว มันก็จะสร้าง application.pid ให้เราแล้ว มันจะถูกสร้างข้างๆไฟล์ jar/war ของเราเลย
$ cat applicaion.pid
19489%
ถ้าใช้ OS เป็น OSX หรือ linux ก็สามารถใช้คำสั่งแบบนี้เพื่อหยุด app ของเราได้เลย $ kill `cat application.pid| awk '{print;}'`
หรือ $ kill $(cat application.pid| awk '{print;}')
Happy Coding ^^
Written with StackEdit.
ไม่มีความคิดเห็น :
แสดงความคิดเห็น