У меня есть приложение, которое становится довольно большим, а время запуска Spring составляет около 20 секунд. Для использования в производстве это прекрасно, но для развития это большая боль.
Что такое хороший инструмент для профилирования или подход, который может дать мне именно ту информацию, которая мне нужна, чтобы выяснить, что так долго? Может быть, это то, что я могу оптимизировать?
Мое приложение - довольно типичное веб-приложение spring/hibernate. Там около 50 таблиц базы данных и несколько сотен beans (например, 200-300... я не считал). Там несколько @Configurable beans. Много компонентного сканирования. Я также использую Spring Безопасность.
Я сделал некоторое профилирование профилирования с log4j - только в настройке INFO. Вот некоторые из вещей, которые занимают немного времени:
- INFO DefaultListableBeanFactory: 555 - Предварительные экземпляры синглонов - 2 секунды
- INFO SessionFactoryImpl: 202 - сессия сборки factory - 2 секунды
- INFO HibernateTransactionManager: 415 - Использование DataSource [com.mchange.v2.c3p0.ComboPooledDataSource......] Hibernate SessionFactory для HibernateTransactionManager - 7 секунд
Есть несколько вещей, которые занимают от 0,5 до 1 секунды, но эти 3 были самыми большими.