Ответ 1
Вы также можете использовать Spring.
У меня есть приложение, которое становится довольно большим, а время запуска Spring составляет около 20 секунд. Для использования в производстве это прекрасно, но для развития это большая боль.
Что такое хороший инструмент для профилирования или подход, который может дать мне именно ту информацию, которая мне нужна, чтобы выяснить, что так долго? Может быть, это то, что я могу оптимизировать?
Мое приложение - довольно типичное веб-приложение spring/hibernate. Там около 50 таблиц базы данных и несколько сотен beans (например, 200-300... я не считал). Там несколько @Configurable beans. Много компонентного сканирования. Я также использую Spring Безопасность.
Я сделал некоторое профилирование профилирования с log4j - только в настройке INFO. Вот некоторые из вещей, которые занимают немного времени:
Есть несколько вещей, которые занимают от 0,5 до 1 секунды, но эти 3 были самыми большими.
Вы также можете использовать Spring.
Один из вариантов, который вы можете попробовать, - использовать параметр по умолчанию-lazy-init для ленивой инициализации beans. Spring инициализирует всю область с единым диапазоном beans во время инициализации. Прочтите Lazily-созданный beans раздел справочный документ.
Обязательно настройте значение параметра так, чтобы вы могли изменить его на true во время dev и false во время производственного развертывания.
Сканирование компонентов медленное. Обратитесь к этому сообщению о том, как отключить это при использовании Autowiring.
Я опечален тем, что до сих пор все ответы сосредоточены на том, как повысить производительность, и ни один из них на самом деле не поможет вам провести анализ. Я использовал YourKit для отличного эффекта в других проблемах профилирования, но не могу говорить о его полезности при запуске Spring.
У меня был хороший успех, разбивая мою конфигурацию Spring на отдельные файлы и загружая только файлы, необходимые для конкретного теста. Это работает особенно хорошо для меня, потому что я использую Camel, который дорого запускается и не используется большинством моих тестов. Я использовал H2, чтобы я мог запускать тесты своих DAOs + Services с базой данных без какого-либо сложного запуска/выключения (хотя это потребовалось некоторое время, чтобы получить все, что было связано вместе). Тем не менее, у меня все еще есть проблема с запуском всего приложения для интерактивного тестирования. Это слишком медленно для меня.
20 секунд, чтобы запустить приложение. это не имеет значения. Какое значение имеет время, необходимое для запуска ваших тестовых случаев!