Ladenie jarných aplikácií

1. Úvod

Ladenie je jedným z najdôležitejších nástrojov na písanie softvéru.

V tomto tutoriáli sa pozrieme na niektoré spôsoby, ako môžeme ladiť jarné aplikácie.

Uvidíme tiež, ako to Spring Boot, tradičné aplikačné servery a IDE zjednodušia.

2. Java Debug Args

Najprv sa pozrime, čo nám Java dáva po vybalení z krabice.

V predvolenom nastavení JVM neumožňuje ladenie. Je to tak preto, lebo ladenie vytvára ďalšiu réžiu vo vnútri JVM. Môže to tiež predstavovať bezpečnostné riziko pre aplikácie, ktoré sú verejne prístupné.

Preto ladenie by sa malo vykonávať iba počas vývoja a nikdy nie na produkčných systémoch.

Predtým, ako môžeme pripojiť debugger, musíme najskôr nakonfigurovať JVM tak, aby umožňoval ladenie. Robíme to nastavením argumentu príkazového riadku pre JVM:

-agentlib: jdwp = transport = dt_socket, server = y, pozastaviť = n, adresa = 8000

Poďme si rozdeliť, čo každá z týchto hodnôt znamená:

-agentlib: jdwp

Povoľte agenta Java Debug Wire Protocol (JDWP) vo vnútri JVM. Toto je hlavný argument príkazového riadku, ktorý umožňuje ladenie.

transport = dt_socket

Na ladenie pripojení použite sieťovú zásuvku. Medzi ďalšie možnosti patria zásuvky Unix a zdieľaná pamäť.

server = r

Počúvajte prichádzajúce pripojenia debuggera. Keď je nastavené na n, proces sa namiesto čakania na prichádzajúce pripojenia pokúsi pripojiť k debuggeru. Ak je nastavená hodnota, sú potrebné ďalšie argumenty n.

pozastaviť = n

Pri štarte nečakajte na ladiace pripojenie. Aplikácia sa spustí a bude bežať normálne, kým nebude pripojený ladiaci program. Keď je nastavené na r, proces sa nespustí, kým nebude pripojený debugger.

adresa = 8000

Sieťový port, ktorý bude JVM počúvať pri ladení pripojení.

Vyššie uvedené hodnoty sú štandardné a budú fungovať pre väčšinu prípadov použitia a operačné systémy. Sprievodca pripojením JPDA pokrýva všetky možné hodnoty podrobnejšie.

3. Aplikácie Spring Boot

Aplikácie Spring Boot je možné spustiť niekoľkými spôsobmi. Najjednoduchšie je to z príkazového riadku pomocou java veliť s -jar možnosť.

Ak chcete povoliť ladenie, jednoducho by sme pridali argument ladenia pomocou -D možnosť:

java -jar myapp.jar -Dagentlib: jdwp = transport = dt_socket, server = y, pozastaviť = n, adresa = 8000

S Mavenom môžeme využiť poskytované bežať cieľ spustiť našu aplikáciu s povoleným ladením:

mvn spring-boot: run -Dagentlib: jdwp = transport = dt_socket, server = y, suspend = n, adresa = 8000

Rovnako tak môžeme s Gradle použiť bootRun úloha. Najprv musíme aktualizovať build.gradle súbor, aby sa zaistilo, že Gradle odovzdá argumenty príkazového riadku JVM:

bootRun {systemProperties = System.properties}

Teraz môžeme vykonať bootRun úloha:

gradle bootRun -Dagentlib: jdwp = transport = dt_socket, server = y, suspend = n, adresa = 8000

4. Aplikačné servery

Zatiaľ čo sa Spring Boot v posledných rokoch stáva veľmi populárnym, tradičné aplikačné servery v moderných softvérových architektúrach stále prevládajú. V tejto časti sa pozrieme na to, ako povoliť ladenie pre niektoré z populárnejších aplikačných serverov.

Väčšina aplikačných serverov poskytuje skript na spustenie a zastavenie aplikácií. Povolenie ladenia je zvyčajne len otázkou pridania ďalších argumentov do tohto skriptu a / alebo nastavenia ďalších premenných prostredia.

4.1. Tomcat

Štartovací skript pre Tomcat je pomenovaný catalina.sh (catalina.bat vo Windows). Ak chcete spustiť server Tomcat s povoleným ladením, môžeme sa pripraviť jpda k argumentom:

catalina.sh jpda štart

Predvolené argumenty ladenia použijú sieťový soket počúvajúci na porte 8000 s pozastaviť = n. Tieto sa dajú zmeniť nastavením jednej alebo viacerých z nasledujúcich premenných prostredia: JPDA_TRANSPORT , JPDA_ADDRESSa JPDA_SUSPEND.

Nastavením tiež môžeme získať úplnú kontrolu nad argumentmi ladenia JPDA_OPTS . Keď je nastavená táto premenná, má prednosť pred ostatnými premennými JPDA. Musí to teda byť úplný argument ladenia pre JVM.

4.2. Wildfly

Štartovací skript pre Wildfly je stand-alone.sh. Ak chcete spustiť server Wildfly s povoleným ladením, môžeme pridať –Debug.

Predvolený režim ladenia používa sieťový poslucháč na porte 8787 s pozastaviť = n. Port môžeme prepísať zadaním po –Debug argument.

Pre väčšiu kontrolu nad argumentom ladenia môžeme do súboru pridať úplné argumenty ladenia JAVA_OPTS premenná prostredia.

4.3. Weblogic

Štartovací skript pre Weblogic je startWeblogic.sh. Pre spustenie servera Weblogic s povoleným ladením môžeme nastaviť premennú prostredia debugFlag do pravda.

Predvolený režim ladenia používa sieťový poslucháč na porte 8453 s pozastaviť = n. Prístav môžeme prepísať nastavením DEBUG_PORT premenná prostredia.

Pre väčšiu kontrolu nad argumentom ladenia môžeme do súboru pridať iba úplné argumenty ladenia JAVA_OPTIONS premenná prostredia.

Najnovšie verzie servera Weblogic poskytujú aj doplnok Maven na spustenie a zastavenie serverov. Tento doplnok bude rešpektovať rovnaké premenné prostredia ako spúšťací skript.

4.4. Glassfish

Štartovací skript pre Glassfish je asadmin. Na spustenie servera Glassfish s povoleným ladením musíme použiť –Debug:

asadmin start-domain --debug

Predvolený režim ladenia používa sieťový poslucháč na porte 9009 s pozastaviť = n.

4.5. Mólo

Aplikačný server Jetty neprichádza so štartovacím skriptom. Namiesto toho sú servery Jetty spustené pomocou servera java príkaz.

Povolenie ladenia je teda také jednoduché ako pridanie štandardných argumentov príkazového riadku JVM.

5. Ladenie z IDE

Teraz, keď sme videli, ako povoliť ladenie v rôznych typoch aplikácií, pozrime sa na pripojenie ladiaceho programu.

Každé moderné IDE ponúka podporu ladenia. Zahŕňa to jednak schopnosť spustiť nový proces s povoleným ladením, ako aj schopnosť ladiť už spustený proces.

5.1. IntelliJ

IntelliJ ponúka prvotriednu podporu pre aplikácie Spring a Spring Boot. Ladenie je také jednoduché ako navigácia do triedy pomocou hlavný kliknite pravým tlačidlom myši na ikonu trojuholníka a vyberte príkaz Debug.

Ak projekt obsahuje viac aplikácií Spring Boot, IntelliJ poskytne okno nástroja Run Dashboard. Toto okno umožňuje ladiť viac aplikácií Spring Boot z jedného miesta:

Pre aplikácie používajúce Tomcat alebo iné webové servery môžeme vytvoriť vlastnú konfiguráciu na ladenie. Pod Bež >Upraviť konfigurácie, existuje množstvo šablón pre najobľúbenejšie aplikačné servery:

Nakoniec, IntelliJ veľmi uľahčuje pripojenie k ľubovoľnému bežiacemu procesu a ladenie. Pokiaľ bola aplikácia spustená so správnymi argumentmi ladenia, IntelliJ sa k nemu môže pripojiť, aj keď je na inom hostiteľovi.

Na Konfigurácie spustenia / ladenia obrazovka, Diaľkové šablóna nám umožní nakonfigurovať, ako sa pripojiť k už spustenej aplikácii:

Upozorňujeme, že IntelliJ musí poznať iba názov hostiteľa a ladiaci port. Pre pohodlie nám poskytuje správne argumenty príkazového riadku JVM, ktoré by sa mali použiť v aplikácii, ktorú chceme ladiť.

5.2. Zatmenie

Najrýchlejším spôsobom, ako ladiť aplikáciu Spring Boot v Eclipse, je kliknúť pravým tlačidlom myši na hlavnú metódu z ľubovoľného z nich Prieskumník balíkov alebo Obrys okná:

Predvolená inštalácia Eclipse nepodporuje Spring alebo Spring Boot po vybalení z krabice. Na Eclipse Marketplace je však k dispozícii doplnok Spring Tools, ktorý poskytuje podporu Spring porovnateľnú s IntelliJ.

Najvýznamnejšie doplnok poskytuje Boot Dashboard, ktorý nám umožňuje spravovať viac aplikácií Spring Boot z jedného miesta:

Doplnok tiež poskytuje a Jarná topánka Konfigurácia Run / Debug, ktorá umožňuje prispôsobiť ladenie jednej aplikácie Spring Boot. Toto prispôsobené zobrazenie je k dispozícii na všetkých rovnakých miestach ako štandard Aplikácia Java konfigurácia.

Na ladenie už spusteného procesu, lokálne alebo na vzdialenom hostiteľovi, môžeme použiť Vzdialená Java aplikácia konfigurácia:

6. Ladenie pomocou Dockeru

Ladenie aplikácie Spring vo vnútri kontajnera Docker môže vyžadovať ďalšiu konfiguráciu. Ak je kontajner spustený lokálne a nepoužíva režim hostiteľskej siete, ladiaci port potom nebude prístupný mimo kontajnera.

Existuje niekoľko spôsobov, ako vystaviť ladiaci port v Dockeri.

Môžeme použiť –Exponovať s docker run príkaz:

docker run - vystaviť 8000 mydockerimage

Môžeme pridať aj EXPOZÍCIA smernica k Dockerfile:

EXPOZÍCIA 8000

Alebo ak používame Docker Compose, môžeme ho pridať do YAML:

vystaviť: - "8000"

7. Záver

V tomto článku sme videli, ako povoliť ladenie pre ľubovoľnú aplikáciu Java.

Jednoduchým pridaním jedného argumentu príkazového riadku môžeme ľahko odladiť ktorúkoľvek aplikáciu Java.

Tiež sme videli, že Maven aj Gradle, ako aj najpopulárnejšie IDE, majú všetky špecializované doplnky, ktoré ladenie aplikácií Spring a Spring Boot ešte uľahčujú.


$config[zx-auto] not found$config[zx-overlay] not found