Tengo una aplicación que se está haciendo bastante grande, y el tiempo de inicio de la primavera es de aproximadamente 20 segundos. Para el uso de producción, esto está bien, pero para el desarrollo, esto es un gran dolor.¿Cuál es la mejor manera de perfilar el contenedor de resorte para aprender a optimizar su tiempo de arranque?
¿Qué es una buena herramienta de perfilado o enfoque que me puede dar con precisión la información que necesito para averiguar qué está tomando tanto tiempo? Tal vez es algo que puedo optimizar?
Mi aplicación es una aplicación web primavera/hibernación bastante típica. Hay aproximadamente 50 tablas de bases de datos y varios cientos de beans (como 200-300 ... No conté). Hay algunos beans @Configurable. Muchos escaneos de componentes. También estoy usando Spring Security.
Hice algunos perfiles de primitización con log4j - solo en la configuración INFO. Estas son algunas de las cosas que están teniendo un poco de tiempo:
- INFO DefaultListableBeanFactory: 555 - únicos-instanciar Pre - 2 segundos
- INFO SessionFactoryImpl: 202 - edificio de la fábrica sesión - 2 segundos
- INFO HibernateTransactionManager: 415 - Uso de DataSource [com.mchange.v2.c3p0.ComboPooledDataSource ......] de Hibernate SessionFactory para HibernateTransactionManager - 7 segundos
Hay un par de cosas que toman 0.5 a quizás 1 segundo a lo sumo, pero estos 3 eran las más grandes.
Usted podría estar interesado en [SPR-8767 - Inicialización de bean paralelo durante el inicio] (https://jira.springsource.org/browse/SPR-8767) –
Interesante. Me parece divertido que la persona de Spring dijera que no considerarían esto hasta que varias personas se quejaran de que era demasiado lento. ¿Estoy solo? Pensé que era lento desde 2002:/No importa cuántas computadoras tenga cada pocos años, siempre puedo contar con que los tiempos de arranque de primavera sean lentos. – egervari
Creo que quiso decir que lo considerarían cuando suficientes personas se quejarán de que afecta la productividad +1 por cierto buena pregunta :) –