SonarQube "fermer ce Contextd'application configurable" dans le projet de démarrage de printemps
J'ai un problème de bloqueur "fermer ce" context configurable D'application "" dans la méthode principale
public static void main(String[] args)
{
SpringApplication.run(MyApplication.class, args);
}
j'ai essayé le code de SonarQube exemple
public static void main(String[] args)
{
ConfigurableApplicationContext context = null;
try
{
context = SpringApplication.run(MyApplication.class, args);
}
finally
{
if (context != null) {
context.close();
}
}
}
mais il ferme le contexte immédiatement après le démarrage.
Comment résoudre ce problème?
3 réponses
La question que SonarQube est de reporting est un faux positif et doit être ignorée. FAQ de SonarQube liste quelques options pour supprimer les faux positifs:
Faux-Positifs et ne sera pas Corrigé
vous pouvez marquer des problèmes individuels comme étant faux positifs ou ne corrigera pas par l'intermédiaire de l'interface des problèmes. Toutefois, cette solution ne fonctionne pas dans toutes les directions générales - vous devrez marquer de nouveau la question faussement Positive pour chaque direction générale faisant l'objet d'une analyse. Donc une approche en code peut être préférable si plusieurs branches d'un projet sont en cours d'analyse:
/ / NOSONAR
vous pouvez utiliser le mécanisme intégré dans le moteur de règles (//NOPMD...) ou le mécanisme Générique mis en œuvre dans SonarQube: mettre //NOSONAR à la fin de la ligne de la question. Cela supprimera le problème.
Désactiver Les Problèmes
vous pouvez examiner un problème pour le signaler comme faux positif directement depuis l'interface utilisateur.
Si vous avez une application web, le contexte de l'application sera détruit (je pense par ContextLoaderListener
, pas sûr), pas de code explicite est nécessaire.
dans le cas d'une application en ligne de commande, le contexte doit être détruit manuellement, sinon les haricots ne seront pas détruits correctement - les méthodes @PreDestroy ne seront pas appelées. E. g:
@Bean
public ApplicationRunner applicationRunner() {
return new ApplicationRunner() {
public void run(ApplicationArguments args) throws Exception {
try {
doStuff();
} finally {
context.close();
}
}
j'ai remarqué cela quand une session de Cassandra est restée ouverte après que mon application en ligne de commande de démarrage de printemps soit terminée.
je suis toujours en train de penser, qu'il est faux positif.
mais vous pouvez tester ceci avec quelques lignes.
@RunWith(SpringRunner.class)
@SpringBootTest
public class YourApplicationTest {
@Test
public void shouldLoadApplicationContext() {
}
@Test
public void applicationTest() {
YourApplication.main(new String[] {});
}
}
maintenant Sonar dit, Ceci est testé!
(Félicitations à: Robert @ https://stackoverflow.com/a/41775613/863403)