tutorial sonar software scanner programming mvn java spring spring-boot sonarqube

software - sonarqube java analysis



SonarQube "Cerrar este ConfigurableApplicationContext" en el proyecto Spring Boot (3)

Tengo un problema con el bloqueador "Cerrar este" ConfigurableApplicationContext "" en el método principal

public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); }

He intentado código de ejemplo de SonarQube

public static void main(String[] args) { ConfigurableApplicationContext context = null; try { context = SpringApplication.run(MyApplication.class, args); } finally { if (context != null) { context.close(); } } }

pero cierra el contexto justo después de comenzar.

¿Cómo arreglar este problema?


El problema que informa SonarQube es un falso positivo y debe ignorarse. Las preguntas frecuentes de SonarQube enumeran algunas opciones para eliminar falsos positivos:

Falso positivo y no solucionará

Puede marcar los problemas individuales como Falso positivo o No se solucionará a través de la interfaz de problemas. Sin embargo, esta solución no funciona en todas las sucursales, tendrá que volver a marcar el problema Falso Positivo para cada rama en análisis. Por lo tanto, un enfoque de código puede ser preferible si se están analizando varias ramas de un proyecto:

// NOSONAR

Puede usar el mecanismo incorporado en el motor de reglas (// NOPMD ...) o el mecanismo genérico implementado en SonarQube: poner // NOSONAR al final de la línea del problema. Esto suprimirá el problema.

Problemas de apagado

Puede revisar un problema para marcarlo como falso positivo directamente desde la interfaz de usuario.


Si tiene una aplicación web, el contexto de la aplicación será destruido (creo que por ContextLoaderListener , no estoy seguro), no se necesita un código explícito.

En el caso de una aplicación de línea de comandos, el contexto debe destruirse manualmente, de lo contrario, los beans no se destruirán correctamente: no se llamarán los métodos @PreDestroy. P.ej:

@Bean public ApplicationRunner applicationRunner() { return new ApplicationRunner() { public void run(ApplicationArguments args) throws Exception { try { doStuff(); } finally { context.close(); } }

Noté esto cuando una sesión de Cassandra permaneció abierta después de que mi aplicación de línea de comandos de inicio de primavera hubiera finalizado.


Siempre estuve pensando, que es falso / positivo.

Pero puedes probar esto con unas pocas líneas.

@RunWith(SpringRunner.class) @SpringBootTest public class YourApplicationTest { @Test public void shouldLoadApplicationContext() { } @Test public void applicationTest() { YourApplication.main(new String[] {}); } }

¡Ahora dice Sonar, esto está probado!
(Kudos va a: Robert @ https://.com/a/41775613/863403 )