Cara men-debug aplikasi pementasan jarak jauh atau produksi Spring Boot
Sisi server
Anggaplah Anda telah berhasil mengikuti panduan Spring Boot tentang menyiapkan aplikasi Spring Boot Anda sebagai layanan . Artefak aplikasi Anda berada /srv/my-app/my-app.war
, disertai dengan file konfigurasi /srv/my-app/my-app.conf
:
# This is file my-app.conf
# What can you do in this .conf file? The my-app.war is prepended with a SysV init.d script
# (yes, take a look into the war file with a text editor). As my-app.war is symlinked in the init.d directory, that init.d script
# gets executed. One of its step is actually `source`ing this .conf file. Therefore we can do anything in this .conf file that
# we can also do in a regular shell script.
JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,address=localhost:8002,server=y,suspend=n"
export SPRING_PROFILES_ACTIVE=staging
Ketika Anda me-restart aplikasi Spring Boot Anda dengan sudo service my-app restart
, maka di file log-nya yang terletak di /var/log/my-app.log
seharusnya ada baris yang mengatakan Listening for transport dt_socket at address: 8002
.
Sisi klien (mesin pengembang)
Buka SSH port-forwarding tunnel ke server: ssh -L 8002:localhost:8002 myusername@staging.example.com
. Biarkan sesi SSH ini tetap berjalan.
Di Eclipse, dari toolbar, pilih Run -> Debug Configurations -> pilih Remote Java Application -> klik tombol New -> pilih sebagai Connection Type Standard (Socket Attach) , sebagai Host localhost , dan sebagai Port 8002 (atau apa pun yang Anda miliki dikonfigurasi di langkah sebelumnya). Klik Apply dan kemudian Debug .
Debugger Eclipse sekarang harus terhubung ke server jarak jauh. Beralih ke perspektif Debug harus menunjukkan JVM yang terhubung dan utasnya. Breakpoint harus diaktifkan segera setelah dipicu dari jarak jauh.