Время перехода в спящий режим до первого действия — слишком медленно

#java #spring #performance #hibernate #web

#java #весна #Производительность #впасть в спящий режим #паутина

Вопрос:

Я запустил новый проект Java Spring Hibernate. На данный момент у меня есть только несколько POJO. Но первые действия hibernate (удаление, создание таблицы и т.д.) происходят слишком поздно, почти через 30 секунд после запуска проекта.

Переход в спящий режим слишком медленный

Как я уже сказал, сейчас кода не так уж много. Я очень новичок в веб-разработке на Java и в гибернации. Это мое приложение.свойства:

 spring.datasource.url=jdbc:oracle:thin:@//localhost:1521/xe
spring.datasource.username=system
spring.datasource.password=*****

spring.datasource.testWhileIdle=true
spring.datasource.validationQuery=SELECT 1

spring.jpa.show-sql=true

spring.jpa.hibernate.ddl-auto=create-drop

spring.jpa.hibernate.naming.physical-strategy=com.bmt311.dershane.CustomPhysicalNamingStrategy

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle12cDialect
 

Комментарии:

1. Вы предполагаете, что эти действия «происходят слишком поздно», но рассматривали ли вы переход туда и обратно с компьютера, на котором запущено приложение, в базу данных и обратно для каждого оператора DML? Кроме того, в проектах «реального мира» почти никто не использует «create-drop», а скорее полагается на существующую базу данных, установщик или инструмент миграции БД, но механизмы гибернации слишком просты для чего-то более сложного.

2. Я сделал это предположение, основываясь на том, что я видел в проектах других людей — в основном, в учебных пособиях. Конечно, это не проект реального мира, и я ожидаю некоторых недостатков в производительности, но я думаю, что «25-30 секунд после запуска» — это проблема. Я думаю, что я делаю что-то очень неправильное.

3. Я вижу, что вы используете Oracle, так что вы запускаете его локально или как ваша настройка? В зависимости от того факта, что, например, ваша база данных работает на сервере, а DML необходимо отправлять по сети, время перехода туда и обратно может быть высоким.

4. Да, моя база данных — Oracle, но она установлена на том же компьютере. Поэтому я не ожидаю никаких «сетевых обходов».

5. добавьте spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false к нему application.properties . Также в зависимости от вашей базы данных подготовка схемы может быть медленной. Другое дело, не используйте запрос проверки (в JDBC4 лучше встроены способы проверки соединения, которые уже использует пул соединений).

Ответ №1:

Почему вы всегда воссоздаете базу данных при локальной разработке? Oracle AFAIK делает довольно много вещей (резерв дискового пространства и т.д.) При использовании DDL, поэтому, как правило, использовать create-drop с Oracle — плохая идея. Попробуйте spring.jpa.hibernate.ddl-auto=update вместо этого использовать для локальной разработки или, что еще лучше, использовать специальный инструмент для управления схемами, такой как Liquibase или Flyway и использовать spring.jpa.hibernate.ddl-auto=none .

Комментарии:

1. Согласен с этим awnser и, вероятно, использовал бы ddl-auto=validate, чтобы убедиться, что база данных синхронизирована (более или менее).