En programmant le redémarrage de Printemps de l'application de Démarrage / d'Actualisation Printemps Contexte
Je suis en train d'en programmant le redémarrage de mon Ressort de l'Application sans avoir à l'utilisateur d'intervenir.
En gros, j'ai une page qui permet de changer de mode de l'application (en fait, le sens de la commutation du mode actuellement actif) et comme je le comprends, je dois redémarrer le contexte.
Actuellement mon code est très simple, c'est juste pour le redémarrage de bits (c'est Kotlin par la voie):
context.close()
application.setEnvironment(context.environment)
ClassUtils.overrideThreadContextClassLoader(application.javaClass.classLoader)
context = application.run(*argsArray)
Cependant le moment, je fais context.close()
la JVM existe immédiatement. J'ai aussi essayé de context.refresh()
mais qui semble tout simplement tuer Tomcat/Jetty (essayé les deux, juste au cas où c'était un Tomcat problème) et puis rien ne se passe.
J'ai également vu Redémarrer par programme du Printemps de Démarrage de l'application mais rien ne semble fonctionner pour moi à partir de ces réponses. En outre, j'ai regardé dans l'Actionneur qui soi-disant a la /restart
point de terminaison, mais qui ne semble pas être plus là?
Aide serait grandement appréciée. Merci.
- Je viens de lire quelque chose à propos de printemps-cloud dernière fois et il y avait un
refresh endpoint
qui rafraîchit al les haricots dans le contexte. Peut-être que vous trouverez quelque chose d'utile. Actualiser la Portée - Pourquoi est-ce tagged "java" ?
- Parce que je n'ai pas de soins si quelqu'un avait une solution en Java ou Kotlin. Kotlin n'a pas de signification dans cette question.
- Java n'est pas significative non plus... Si vous étiquette de Java il serait bon de fournir une version Java de la solution au moins. (Je peux faire la traduction, mais probablement pas tous les gens qui programme en Java et de la terre ici sera en mesure d')
Vous devez vous connecter pour publier un commentaire.
Même si Alex solution œuvres, je ne crois pas en la comprenant 2 dépendances supplémentaires (
Actuator
etCloud Context
) juste pour être en mesure de faire une opération. Au lieu de cela, j'ai combiné sa réponse et modifié mon code pour faire ce que je voulais.Alors, tout d'abord, il est crucial que le code est exécuté à l'aide de
new Thread()
etsetDaemon(false);
. J'ai le endpoint suivant la méthode qui gère le redémarrer:La
Thread.sleep(1000)
n'est pas nécessaire, mais je veux que mon contrôleur à la sortie de la vue avant de redémarrer l'application.SpringMain.restartToMode
est la suivante:Où
context
etapplication
viennent de lamain
méthode dès le démarrage de l'application:Je ne suis pas entièrement sûr si ce produit tous les problèmes. Si il y en aura, je mettrai à jour cette réponse. J'espère que cela sera utile à d'autres.
Au cas où ça pourrait aider quelqu'un, voici un pura Java traduction de Crembo accepté de répondre.
Méthode de contrôleur:
Classe principale (important bits uniquement):
Vous pouvez utiliser le
RestartEndPoint
(enspring-cloud-context
dépendance) pour redémarrer le Printemps de l'application de Démarrage du programme:Il fonctionne, même si elle va lever une exception pour vous informer que cela peut conduire à des fuites de mémoire:
La même réponse a été donnée à cette autre question (libellée différemment): Appel actionneur /redémarrez l'ordinateur d'extrémité à partir du Printemps de démarrage à l'aide d'une fonction java
J'ai résolu ce problème en utilisant de Redémarrage de Printemps Devtools.
Ajoutez à cela pom.xml:
Ensuite utiliser org.springframework.de démarrage.devtools.redémarrez.De redémarrage
pour appeler cette:
Cela fonctionne pour moi. Espérons que cette aide.
Ci-dessous redémarrer méthode de travail.
`@SpringBootApplication
public class Application {
}`