tutorial starter start mvc example application java spring spring-boot

java - starter - spring boot wikipedia



Minimizar el tiempo de inicio de arranque de primavera (2)

En mi opinión, los proyectos SpringBoot tardan mucho tiempo en cargarse. Esto probablemente sucede porque SpringBoot está configurando los componentes para usted, algunos de los cuales quizás ni siquiera necesite. Lo más obvio es eliminar las dependencias innecesarias de su ruta de clase. Sin embargo, eso no es suficiente.

¿Hay alguna manera de averiguar qué módulos SpringBoot está configurando para que usted elija lo que no necesita y deshabilítelos?

¿Hay algo más que se pueda hacer para acelerar el tiempo de inicio de las aplicaciones SpringBoot en general?


Algunos consejos adicionales que pueden ser útiles.

  • Use OpenJ9 lugar de Hotspot para el desarrollo
  • Si usa Hibernate, configure hibernate.ddl-auto=none lugar de update
  • Establecer vmargs en -Xquickstart
  • Si usa OpenJ9, configure vmargs en -XX:TieredStopAtLevel=1 -noverify
  • Si usa Hotspot, use la compilación IDE en lugar de la compilación de Gradle
  • Usa la resaca en lugar de Tomcat
  • No abuse de las herramientas de procesamiento de anotaciones (mapstruct, immutables ...) que ralentizarán el proceso de construcción.

Adicionalmente:

Como este artículo recomienda usar @ComponentScan(lazyInit = true) para el entorno de desarrollo local.

TL; DR

Lo que queremos lograr es habilitar la carga diferida del bean solo en su entorno de desarrollo local y dejar una inicialización impecable para la producción. Dicen que no puedes tener tu pastel y comerlo también, pero con Spring puedes hacerlo. Todo gracias a los perfiles.

@SpringBootApplication public class LazyApplication { public static void main(String[] args) { SpringApplication.run(LazyApplication.class, args); } @Configuration @Profile("local") @ComponentScan(lazyInit = true) static class LocalConfig { } }


Puedo decirle que ejecuto una gran aplicación (más de 800,000 líneas de código), que utiliza servicios web tranquilos a través de Spring MVC, JMS, transacciones Atomikos, Hibernate, soporte JMX y Tomcat integrado. Con todo eso, la aplicación se iniciará en mi escritorio local en unos 19 segundos.

Spring Boot se esfuerza por no configurar los módulos que no está utilizando. Sin embargo, es fácil introducir dependencias y configuraciones adicionales que no pretendía.

Recuerde que Spring Boot sigue la convención sobre el paradigma de configuración y, simplemente al colocar una biblioteca en su ruta de clases, Spring Boot puede intentar configurar un módulo para usar la biblioteca. Además, al hacer algo tan simple como anotar su clase con @RestController, Spring Boot activará la configuración automática de toda la pila Spring MVC.

Puede ver lo que ocurre debajo de las cubiertas y habilitar el registro de depuración tan simple como especificar --debug al iniciar la aplicación desde la línea de comandos. También puede especificar debug = true en su application.properties.

Además, puede establecer el nivel de registro en application.properties tan simple como:

logging.level.org.springframework.web: DEBUG logging.level.org.hibernate: ERROR

Si detecta un módulo autoconfigurado que no desea, se puede desactivar. Los documentos para esto pueden encontrarse aquí: http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#using-boot-disabling-specific-auto-configuration

Un ejemplo sería:

@Configuration @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) public class MyConfiguration { }