[JAVA] Ich habe versucht, eine Webanwendung voller Fehler mit Kotlin zu implementieren

Überblick

Vorher eingeführt Fehlergefüllte Webanwendung ["EasyBuggy"](https://github.com/k-tamura/easybuggy/blob/master/README Implementieren Sie den Spring Boot-basierten Klon "EasyBuggy Boot" von .jp.md) in Kotlin erneut Ich habe es gesehen ("EasyBuggy Bootlin").

Sie können es von dieser Seite herunterladen und mit dem folgenden Befehl starten.

java -jar ROOT.war
: writing_hand_tone1: Zum Starten ist Java 8 oder höher erforderlich. Wenn Sie "java -jar ROOT.war --port = 9000" setzen, wird es auf Port 9000 gestartet.

Durch Hinzufügen der unten gezeigten Java-Option können Sie Protokolle ausgeben, debuggen und mit JMX überwachen. Es begrenzt auch die maximale Speichernutzung und macht es anfälliger für Probleme wie OutOfMemoryError.

java -Xmx256m -XX:MaxPermSize=64m -XX:MaxDirectMemorySize=90m -XX:+UseSerialGC -Xloggc:logs/gc.log -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M -XX:GCTimeLimit=15 -XX:GCHeapFreeLimit=50 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=logs/ -XX:ErrorFile=logs/hs_err_pid%p.log -agentlib:jdwp=transport=dt_socket,server=y,address=9009,suspend=n -Dderby.stream.error.file=logs/derby.log -Dderby.infolog.append=true -Dderby.language.logStatementText=true -Dderby.locks.deadlockTrace=true -Dderby.locks.monitor=true -Dderby.storage.rowLocking=true -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7900 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -ea -jar ROOT.war

Wenn die folgende Meldung angezeigt wird, wurde die Webanwendung gestartet.

2017-10-19 16:36:01.065  INFO 5304 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8081 (http)
2017-10-19 16:36:01.075  INFO 5304 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 0
2017-10-19 16:36:01.242  INFO 5304 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-10-19 16:36:01.249  INFO 5304 --- [           main] o.t.e.Easybuggy4ktApplicationKt          : Started Easybuggy4ktApplicationKt in 37.355 seconds (JVM running for 38.916)

Wenn Sie http: // localhost: 8080 besuchen, wird die Hauptseite angezeigt.

demo_ebk_ja_startup.gif

Der Start ist etwas langsam (ca. 15 Sekunden. EasyBuggy startet in 3 Sekunden ...)

Andere Startmethoden als die oben genannten

Sie können es auch mit git clone und gradle bootRun starten.

$ git clone https://github.com/k-tamura/easybuggy4kt
$ cd easybuggy4kt
$ gradle bootRun
`server.port = $ {port: 8080}` Zeile in `src / main / resources / application.properties` wird in` server.port = 9000` geändert Dann startet es an Port 9000.

Sie können ROOT.war auch in einem Java-Container wie Tomcat 8.5 bereitstellen, und es funktioniert auch.

Nutzung dieser App

Ähnlich wie bei "Easy Buggy" und "Easy Buggy Boot" besteht der Zweck darin, das Verständnis verschiedener Hindernisse zu reproduzieren, zu analysieren und zu vertiefen. Der Grund, warum ich es in Kotlin neu implementiert habe, war, dass ich Folgendes wissen wollte:

――Ist es möglich, Schwachstellen und Ressourcenlecks in mit Kotlin implementierten Apps zu erstellen? --Was ist erforderlich, um eine von Java implementierte App in Kotlin erneut zu implementieren?

  • Verbessert Kotlin die Lesbarkeit durch die Neuimplementierung von Java-implementierten Apps?

Demo

Das Folgende ist eine Demo des Zugriffs auf die Seite, auf der der Speicherverlust häufig auftritt, und des Beobachtens des Status des Speicherverlusts.

demo_ebk_ja_memleak.gif

Unterschiede in der Konfiguration

Die Hauptunterschiede in den Konfigurationen von "EasyBuggy", "EasyBuggy Boot" und "EasyBuggy Bootlin" sind wie folgt.

Unterschied EasyBuggy EasyBuggy Boot EasyBuggy Bootlin
Sprache Java Java Kotlin
Basistechnologie Servlet 3.0.1 Spring Boot 1.5.6 (Servlet 3.0.1) Spring Boot 1.5.7 (Servlet 3.0.1)
Präsentationsfolie ungebraucht(Einige JSP 2.2 + JSTL 1.2) Thymeleaf 2.1.5 (Einige JSP 2.3 + JSTL 1.2) Thymeleaf 2.1.5 (Einige JSP 2.3 + JSTL 1.2)
Servlet-Behälter Tomcat 7.0.37 Tomcat 8.5.16 Tomcat 8.5.20
DB-Client/Server JDBC / Derby 10.8.3.0 Spring JDBC 4.3.9 / Derby 10.12.1.1 (Für Java 7)Oder 10.13.1.1 (Für Java 8) Spring JDBC 4.3.11 / Derby 10.13.1.1
LDAP-Client/Server Apache DS Client API 1.0.0 / Server 1.5.5 Spring LDAP 2.3.1 / unboundid-ldapsdk 3.2.1 Spring LDAP 2.3.1 / unboundid-ldapsdk 3.2.1
Email JavaMail 1.5.1 JavaMail 1.5.1 (Java Mail eingeführt von Spring Boot Mail 1.5.6 überschreiben) JavaMail 1.5.1 (Java Mail eingeführt von Spring Boot Mail 1.5.6 überschreiben)
Entwicklungswerkzeuge Keiner Spring Boot Developer Tools 1.5.6 Spring Boot Developer Tools 1.5.7
Werkzeug erstellen Maven Maven Gradle
Java Unterstützt Java 6 und höher Unterstützt Java 7 und höher Unterstützt Java 8 und höher

Wie zu bauen

Mit dem folgenden Befehl können Sie eine ausführbare und bereitstellbare War-Datei erstellen:

$ gradle clean build

Entwicklungsmethode

Für die Entwicklung von EasyBuggy Bootlin verwenden wir IntelliJ IDEA von JetBrains, das Kotlin entwickelt hat. Ich habe IntelliJ gegenüber STS gewählt, weil es nützliche Funktionen wie das Konvertieren von Java-Programmen in Kotlin-Programme bietet. Dank IntelliJ konnte ich diese App in relativ kurzer Zeit entwickeln.

Um die Entwicklung zu beschleunigen, starten Sie EasyBuggy Bootlin mit "gradle bootRun", während Sie kontinuierlich mit "gradle build --continuous" erstellen. Wenn Sie mit dieser Methode den Quellcode ändern, lädt Spring Boot DevTools ihn automatisch neu, um die Änderung widerzuspiegeln.

demo_ebk_ja_devtool.gif

Recommended Posts