[JAVA] J'ai essayé de réduire la capacité de Spring Boot

Auto-introduction


Qu'est-ce que Spring Boot?

--Mécanisme / cadre facilitant la création d'applications basées sur Spring


Avantages d'un seul pot

spring-boot.JPG


Inconvénients d'un seul pot

spring-boot.JPG


J'ai essayé de réduire la taille du pot


résultat

img1.JPG


résultat

img2.JPG


Comparaison de taille

graph_2.JPG


Comment avez-vous fait?


Comment faites-vous Hello World en Java?


1. 1. Ecrire le code

Hello.java


public class Hello {
    public static void main(String... args) {
        System.out.println("Hello World");
    }
}

2. Compiler avec javac

$ javac Hello.java

3. 3. Hello.class est généré

after-javac.jpg


4. Exécuter sur java

$ java Hello
Hello World

Avez-vous compris?


La capacité du code source avant compilation est plus petite!

L'API qui peut frapper javac est standard!

java-compiler.jpg

https://docs.oracle.com/javase/jp/8/docs/api/javax/tools/JavaCompiler.html


yaruo.jpg


Comment fonctionne le pot amélioré

|-LightweightJarExecutor.class  :
|→ Code qui extrait le source de son propre jar, le compile et l'exécute
|-...
`-src/        :Spring Boot et un ensemble de sources pour les bibliothèques dépendantes
  |-ch/       : logback
  |-com/      :jackson ou com.comme le soleil
  |-javax/    :API standard javaee
  |-META-INF/
  |-org/      : Spring, hibernate, JBoss, Tomcat, etc... 
  `-sample/   :Spring MVC Hello World

Comportement au démarrage

  1. Extrayez le code source de votre propre fichier jar et copiez-le dans un répertoire temporaire
  2. Compilez la sortie source dans le répertoire temporaire en utilisant JavaCompiler
  3. Chargez la classe principale Spring Boot (JarLauncher) depuis la destination de sortie du résultat de la compilation en utilisant ʻURLClassLoader`.
  4. Exécutez la méthode main () de JarLauncher

Compilez juste à temps! (not) </ span>


S'il est laissé tel quel, il sera un gaspillage et ne pourra pas être réduit en poids.

lightweight-jar.jpg


Inutile 1: Commentaire

lightweight-jar.jpg


Déchets 2: Annotation

lightweight-jar.jpg


Déchets 3: privé

lightweight-jar.jpg


Déchets 4: blanc + saut de ligne

lightweight-jar.jpg


Code sophistiqué et allégé

lightweight-jar.jpg


Résultat Réussi à réduire la capacité de 5 Mo! : grin :: thumbsup:

graph_2.JPG


Compensation 1: démarrage lent: innocent :: thumbsdown:

lightweight-jar.jpg


Compensation 2: impossible de déboguer: joy :: thumbsdown:

lightweight-jar.jpg


Veuillez ne pas imiter un bon enfant

Recommended Posts

J'ai essayé de réduire la capacité de Spring Boot
05. J'ai essayé de supprimer la source de Spring Boot
Je veux contrôler le message d'erreur par défaut de Spring Boot
L'histoire de la montée de la série Spring Boot 1.5 à la série 2.1
[Spring Boot] J'ai étudié comment implémenter le post-traitement de la demande reçue.
J'ai essayé de cloner une application Web pleine de bugs avec Spring Boot
J'ai essayé d'expliquer la méthode
J'ai essayé GraphQL avec Spring Boot
J'ai essayé Flyway avec Spring Boot
L'histoire de la montée de Spring Boot de la série 1.5 à la série 2.1 part2
À propos de la fonction de Spring Boot en raison de différentes versions
J'ai essayé de résumer les bases de kotlin et java
J'ai essayé de vérifier ceci et celui de Spring @ Transactional
J'ai brièvement résumé la grammaire de base de Ruby
J'ai essayé de créer un environnement de WSL2 + Docker + VSCode
J'ai essayé de démarrer avec Swagger en utilisant Spring Boot
J'ai essayé de résoudre le problème de la "sélection multi-étapes" avec Ruby
J'ai essayé de résumer les méthodes utilisées
Je veux comprendre le flux des paramètres de demande de traitement Spring
J'ai essayé de créer un environnement de serveur UML Plant avec Docker
J'ai essayé Spring.
Ce que j'ai fait lors de la migration de la série Spring Boot 1.4 vers la série 2.0
J'ai essayé d'implémenter le modèle Iterator
J'ai essayé l'initialisation paresseuse avec Spring Boot 2.2.0
J'ai essayé de vérifier le fonctionnement du serveur gRPC avec grpcurl
Ce que j'ai fait lors de la migration de la série Spring Boot 1.5 vers la série 2.0
J'ai essayé de résumer l'API Stream
J'ai essayé de résumer les méthodes de Java String et StringBuilder
J'ai essayé de résoudre le problème de Google Tech Dev Guide
Je veux connaître la méthode du contrôleur où l'exception a été levée dans le ExceptionHandler de Spring Boot
Étapes pour rendre Spring Boot capable de faire référence à la valeur dans le fichier de propriétés
J'ai essayé de résumer les points clés de la conception et du développement de gRPC
J'ai utilisé Docker pour solidifier le modèle à développer avec Spring Boot.
J'ai essayé d'utiliser pleinement le cœur du processeur avec Ruby
J'ai essayé de visualiser l'accès de Lambda → Athena avec AWS X-Ray
J'ai essayé de mesurer et de comparer la vitesse de Graal VM avec JMH
Résumé de ce que j'ai appris sur Spring Boot
[Rails] J'ai essayé de faire passer la version de Rails de 5.0 à 5.2
J'ai essayé d'organiser la session en Rails
C # (base de l'encapsulation)
Je veux var_dump le contenu de l'intention
Vérifions la sensation de Spring Boot + Swagger 2.0
J'ai essayé de lier JavaFX et Spring Framework.
J'ai essayé de configurer tomcat pour exécuter le servlet.
Je voulais classer la botte à ressort dans un multi-projet
[Spring Boot] Comment se référer au fichier de propriétés
J'ai essayé d'utiliser le profileur d'IntelliJ IDEA
[J'ai essayé] Tutoriel de printemps
J'ai essayé Spring Batch
Ce que j'ai essayé quand je voulais obtenir tous les champs d'un haricot
03. J'ai envoyé une demande de Spring Boot à l'API de recherche de code postal
J'ai essayé de comparer la technologie d'infrastructure des ingénieurs ces jours-ci avec la cuisine.
Comment définir des variables d'environnement dans le fichier de propriétés de l'application Spring Boot
Spécifiez le codage des ressources statiques dans Spring Boot
J'ai essayé d'implémenter le téléchargement de fichiers avec Spring MVC
J'ai essayé d'utiliser la fonction Server Push de Servlet 4.0