Spring-Boot und Spring Data Programmstart zu langsam

grindelaner

Bekanntes Mitglied
Hallo ich verwende Spring Boot und Spring Data.
Meine Datenbank hat etwas über 2.000 Tabellen.

Wenn ich meine Anwendung starte dauert das gefühlt über zwei Minuten, da Spring Data immer die Datenbank und deren ORM-Bäume initialisiert...

Für die Entwicklung ist das etwas nervig, wenn man häufig die Anwendung neu starten muss...

Kenn jemand eine Möglichkeit die Startprozedur von Spring Boot zu verschnellern?
 

stg

Top Contributor
Mit Spring Boot wird das vermutlich weniger zu tun haben, sondern dein Problem vermute ich eher in deiner Vorgehensweise bei der Entwicklung. Du wirst ja kaum immer an allen Ecken gleichzeitig arbeiten. Wenn du eine UI entwickelst, dann ist es dieser z.B. egal, wo die Daten herkommen und den ganzen Rest der Anwendung brauchst du dann auch nicht. Wenn du also in kleinen Abständen "selbst immer mal gucken willst", wie das Ergebnis nun aussieht, dann betrachte also auch nur diesen kleinen Ausschnitt, an dem du gerade arbeitest. Für das große ganze gibt es dann Build-Server, automatisierte Tests usw. Da ist es dann auch egal, wenn so ein Build mal ne halbe Stunde dauert.
Auf der anderen Seite läuft vermutlich was schief, wenn gleich zu Beginn der Anwendung der gesamte Datenbestand ausgelesen werden muss. Was du da gebastelt hast, kann man aber nicht mal erraten, ohne einen Blick in deinen Anwendung geworfen zu haben.
 

mrBrown

Super-Moderator
Mitarbeiter
Auf der anderen Seite läuft vermutlich was schief, wenn gleich zu Beginn der Anwendung der gesamte Datenbestand ausgelesen werden muss. Was du da gebastelt hast, kann man aber nicht mal erraten, ohne einen Blick in deinen Anwendung geworfen zu haben.
Ich denke, dass ist die Validierung von Entitys und Datenbank, das dürfte doch bei jedem Start passieren?

Allerdings klingt eine Anwendung, die 2000 Tabellen braucht nicht grad nach einer Anwendung, sondern nach ziemlich vielen, die einfach in ein Projekt gesteckt wurden...
 

Blender3D

Top Contributor
Auf der anderen Seite läuft vermutlich was schief, wenn gleich zu Beginn der Anwendung der gesamte Datenbestand ausgelesen werden muss. Was du da gebastelt hast, kann man aber nicht mal erraten, ohne einen Blick in deinen Anwendung geworfen zu haben.

Ich denke auch, dass Du Deinen Zugriff auf die Daten überdenken solltest. Stichwort Proxy Pattern.
https://de.wikipedia.org/wiki/Stellvertreter_(Entwurfsmuster)

https://de.wikipedia.org/wiki/Stellvertreter_(Entwurfsmuster)
 

grindelaner

Bekanntes Mitglied
Ich hoffe, dass Spring-Boot etwas von Haus aus mitbringt. Die Persistenzschicht ist ja über die sogenannten "Repository-Interfaces" gekapselt...
Ich habe an so etwas gedacht wie Spring DEV-Tools, dem du dann sagen kannst schalte alle Prüfungen aus und starte dann die Anwendung schneller...
 

grindelaner

Bekanntes Mitglied
Ich versuche meine Frage noch einmal anders zu stellen:
Weiß jemand wie man die Startprozedur von Spring Boot mit Spring Data für die Entwicklung schneller machen kann?

Gibt es da irgendwelche Optionen an den man schrauben kann?
 

mrBrown

Super-Moderator
Mitarbeiter
spring.jpa.properties.javax.persistence.validation.mode=none in den properties sollte die Validierung abschalten
 

dennisbauer

Aktives Mitglied
Das klingt nach einem Konfigurationsfall nach diesem hier:
https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

Speziell die beiden in 78.1 genannten Parameter solltest du, für so eine große Datenbank ersteinmal ausschalten und lieber mit einem inkrementellen Tool arbeiten, dass deine Datenbank mittels Änderungen erweitert. Da kann ich Liquitbase empfehlen, Änderungen an Tabellen werden als "Changelog" definiert und angewandt bei Start. Das lässt sich auch in Spring integrieren.

Wenn Spring erstmal für 2000 Tabellen Anfragen an die Datenbank schicken muss, um die zu überprüfen, das kann durchaus mal eine Weile dauern, zumindest würde ich das so erwarten.
 

grindelaner

Bekanntes Mitglied
Danke für die Hinweise.
Vielleicht stelle ich mich blöd an, aber die Zeit zum Hochfahren der Anwendung hat sich nicht geändert.
Started ServletInitializer in 57.524 seconds (JVM running for 63.972)
Es dauert also ca. 60 Sekunden, bis die Anwendung gestartet ist.

Ich habe es mit folgenden Parametern in der application.properties ausprobiert.
spring.jpa.properties.javax.persistence.validation.mode=none
spring.jpa.generate-ddl=false


Zu DatabaseInitialization:
Ich starte eine bestehende Datenbank. Das Datenbankschema ist also schon da...

Kennt sich vielleicht jemand mit Spring-boot-devtools aus?
Da soll es so etwas geben wie schnelleres Neustarten den Anwendung:
https://docs.spring.io/spring-boot/...to-hotswapping.html#howto-reload-fast-restart
 

dzim

Top Contributor
Nur so eine Idee, die mir gerade in den Sinn kommt: Worauf startest du eigentlich die Anwendung? Linux? Windows?

Sie enthält ja sicher auch einen Tomcat/etc. Unter Linux muss (bzw. sollte man) man beim Start noch einen Parameter mitgeben:
Code:
-Djava.security.egd=file:/dev/./urandom
Das Problem ist, das eventuell nicht genug Entropy für die Initialisierung zur Verfügung steht, dann wartet man auf den Start der Anwendung (auch von kleinen Anwendungen) mitunter recht lang.
 

JuKu

Top Contributor
Spring an sich gehört auch nicht gerade zu den performantesten Frameworks...
Aber bei 2000 Tabellen hast du irgendwas falsch gemacht.
Entweder zu viel normalisiert oder du solltest deine Anwendung aufteilen.
 

dzim

Top Contributor
Welches vergleichbare ist denn performanter?
z.B. wenn man es minimalitischer angeht mit Guice.

#edit: Vielleicht auch vert.x... Noch nie Probiert, aber wenigstens vom Anbieten der Daten her scheint es ja performant zu sein.

Dann muss man aber eben schauen, wie man die DB-Sache hinbekommt. Bei einer existierenden Struktur wie hier, würde ich wohl mal jOOQ ausprobieren. Steht auf meiner TODO-Liste, hatte bisher aber noch kein passendes Projekt. :)
 

mrBrown

Super-Moderator
Mitarbeiter
z.B. wenn man es minimalitischer angeht mit Guice.

#edit: Vielleicht auch vert.x... Noch nie Probiert, aber wenigstens vom Anbieten der Daten her scheint es ja performant zu sein.

Dann muss man aber eben schauen, wie man die DB-Sache hinbekommt. Bei einer existierenden Struktur wie hier, würde ich wohl mal jOOQ ausprobieren. Steht auf meiner TODO-Liste, hatte bisher aber noch kein passendes Projekt. :)
Aber von denen ist ja auch keins wirklich vergleichbar mit dem Spring-Framework, da muss man ja schon alle 3 kombinieren, und das würde kaum an das ran kommen, was Spring Boot + Spring Data bietet...
 

thecain

Top Contributor
Dann muss man aber eben schauen, wie man die DB-Sache hinbekommt. Bei einer existierenden Struktur wie hier, würde ich wohl mal jOOQ ausprobieren. Steht auf meiner TODO-Liste, hatte bisher aber noch kein passendes Projekt. :)
Kommt von der Einfachheit niemals an Spring Data ran (will es ja auch nicht). Als alternative sähe ich Apache DeltaSpike. Aber ich würde das Problem jetzt nicht auf die Spring Performance schieben.
 

dzim

Top Contributor
Ich denke auch eher, dass es weniger an Spring liegt (trotz etwas langsamerer Startzeiten), sondern eher an Hibernate, wenn es das Model verifiziert (Modell-Klassen gegen DDL - auch wenn ich die Interna zu wenig kenne, was Hibernate da eigentlich macht).

Ich wollte ja nur Alternativen zeigen - auch wenn sie vielleicht etwas unzulänglich sein mögen. Wobei Vert.x sicher ein Ersatz für den Web-Teil sein könnte, aber mehr eben auch nicht.

Muss denn die Applikation alle Modelle beinhalten? Könnte man denn nicht mehr dem Mikroservice-Ansatz folgen und alles etwas nach "Themen" aufspalten?
 

dzim

Top Contributor
Dennoch würde ich eher Micro-Services verwenden, die nur das enthalten, was sie brauchen. Nicht alles. Und in dem Fall dieser DB würde vielleicht jOOQ sich anbieten - das kann die DB "scannen" und den Client generieren. Unter der Haube "native" Queries, kein ORM im Sinne vom Hibernate, sondern ein automatisches Konvertieren, das man sonst selbst und von Hand schreiben müsste.
 

dzim

Top Contributor
Spring Boot und andere Server sind i.d.R. kein Problem (jetty, undertow, …) - Grizzly kenn ich nicht.
Und auch jOOQ ist IMHO kein Problem. Also wahrscheinlich alles integrierbar.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Spring Boot Test Assertions mit Objekten Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Pfad zu Test Datei in application.yml in Spring Boot Test Frameworks - Spring, Play, Blade, Vaadin & Co 7
R Spring Boot sql Beziehungen Frameworks - Spring, Play, Blade, Vaadin & Co 12
M Spring Boot 3 Datenbanken zur Laufzeit Verbinden Frameworks - Spring, Play, Blade, Vaadin & Co 5
ExceptionOfExpectation In Meiner Spring-Boot Applikation verlangt die Datenbank Wert für eine ID Frameworks - Spring, Play, Blade, Vaadin & Co 5
H Spring Boot Applikation und JHM Benchmark sowie ContextConfiguration in H2 Tests ich bekomme es nicht hin Frameworks - Spring, Play, Blade, Vaadin & Co 2
ExceptionOfExpectation Tests in Spring-Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
Avalon Get Request doppelt abfeuern ohne Post Redirect Get Pattern. Spring Boot Thymeleaf MVC Frameworks - Spring, Play, Blade, Vaadin & Co 12
thor_norsk Konfigurationsprobleme mit Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 9
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 1
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 13
thor_norsk Spring Boot Fehler Frameworks - Spring, Play, Blade, Vaadin & Co 1
thor_norsk Spring Boot und Docker Frameworks - Spring, Play, Blade, Vaadin & Co 5
D Spring Boot Test ob Validation geprüft wurde Frameworks - Spring, Play, Blade, Vaadin & Co 8
K Spring Boot OneToMany Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Spring Boot Docker Image erstellen und mit docker-compose konfigurieren Frameworks - Spring, Play, Blade, Vaadin & Co 1
gradlew.bat spring-boot:run funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 4
Zrebna Spring Boot/Thymeleaf: Bestätigungsemail senden. Frameworks - Spring, Play, Blade, Vaadin & Co 2
B Spring Boot und JPA Error creating bean Frameworks - Spring, Play, Blade, Vaadin & Co 24
R Spring Boot: Warum soll PasswordEncoder in einer neuen Methode definiert sein? Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring Boot und Microservices Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Boot additional Datasource for a single entity Frameworks - Spring, Play, Blade, Vaadin & Co 0
Avalon Wie sieht bei Euch das Deployment einer Spring Boot Anwendung aus? Frameworks - Spring, Play, Blade, Vaadin & Co 4
M Threads in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 7
W DI-Problem in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
T Spring Boot: Was bewirkt parent in maven genau? Frameworks - Spring, Play, Blade, Vaadin & Co 4
OnDemand Vaadin+Spring Boot erster Seitenload nach Neustart endlos Frameworks - Spring, Play, Blade, Vaadin & Co 0
doncarlito87 Wie erhalte ich ein JSON aus eine NativeQuery (Spring Boot)? Frameworks - Spring, Play, Blade, Vaadin & Co 8
Avalon @Query Select Abfrage liefert falsche Werte (Spring Boot, JPA, Hibernate) Frameworks - Spring, Play, Blade, Vaadin & Co 3
Avalon Erstellung Dockerimage mit spring-boot:build-image in Spring Boot mit Umgebungsvariablen Frameworks - Spring, Play, Blade, Vaadin & Co 0
D Spring Boot Field Injection in MapStruct Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand Spring Boot seltsame Logeinträge: Manipulationsversuche? Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Spring Boot Mile Stone und Snapshot Versionen Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Boot Exception Body Frameworks - Spring, Play, Blade, Vaadin & Co 2
N Spring Boot - Overkill für private Projekte? Frameworks - Spring, Play, Blade, Vaadin & Co 3
K Migration eines internen Frameworks zu Spring:Boot Frameworks - Spring, Play, Blade, Vaadin & Co 0
Z Hibernate & Postgres in Spring Boot (Syntaxprobleme) Frameworks - Spring, Play, Blade, Vaadin & Co 2
Z Spring Boot mit JPA;, Hibernate, Rest & Lombok Frameworks - Spring, Play, Blade, Vaadin & Co 8
OnDemand Spring Security/Boot/Vaadin Cookie Problem bei iFrame Frameworks - Spring, Play, Blade, Vaadin & Co 4
OnDemand Spring Boot: Feld ignorieren Frameworks - Spring, Play, Blade, Vaadin & Co 3
N Buch zum Spring Framework bzw. Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand Jasypt Spring Boot HIbernate wie komme ich an den Key? Frameworks - Spring, Play, Blade, Vaadin & Co 4
8u3631984 Spring Boot im Docker Container - Logback wird nicht verwendet Frameworks - Spring, Play, Blade, Vaadin & Co 13
sascha-sphw Spring Boot Resource Server (OAuth2) @MockMvc Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand Spring Boot CDN Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Boot Deserialiserung mit JSON Frameworks - Spring, Play, Blade, Vaadin & Co 9
OnDemand Spring Boot POST zu PHP API Frameworks - Spring, Play, Blade, Vaadin & Co 12
OnDemand Spring Boot WebClient ErrorHandling Frameworks - Spring, Play, Blade, Vaadin & Co 5
8u3631984 Spring boot : Unique Constraint mit Many to Many Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Boot Repository null Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Boot Limits API calls Frameworks - Spring, Play, Blade, Vaadin & Co 20
J Spring boot mit Keyclaok rollen basiert Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Boot Scheduler flexibel machen Frameworks - Spring, Play, Blade, Vaadin & Co 4
OnDemand Spring Boot + Vaadin API Security Frameworks - Spring, Play, Blade, Vaadin & Co 1
S Spring Boot und seine Module verstehen Frameworks - Spring, Play, Blade, Vaadin & Co 3
R Architektur für Spring Boot Projekt Frameworks - Spring, Play, Blade, Vaadin & Co 5
M Spring Boot, Versionskontrolle und Entwicklungsumgebung und Deployment Frameworks - Spring, Play, Blade, Vaadin & Co 2
Avalon Image aus JSON Objekt im Browser anzeigen (BLOB, extrahieren, konvertieren) Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
Avalon CSS Datei wird in Spring Boot mit Thymeleaf im Standardordner nicht gefunden Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand Spring Boot Mapping null bei GET Aufruf Frameworks - Spring, Play, Blade, Vaadin & Co 8
OnDemand Spring Boot Test mit Junit Frameworks - Spring, Play, Blade, Vaadin & Co 8
J Spring Boot - Reactor Frameworks - Spring, Play, Blade, Vaadin & Co 1
L Spring Boot, H2 und Restschnittstelle synchonisation mit Client Frameworks - Spring, Play, Blade, Vaadin & Co 10
TonioTec Spring Boot Datenbankabfrage Frameworks - Spring, Play, Blade, Vaadin & Co 7
OnDemand Spring Boot encoding Slash in URL Parameter Frameworks - Spring, Play, Blade, Vaadin & Co 7
S Spring Boot startet nicht Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Boot -> War File | 404 in Tomcat Frameworks - Spring, Play, Blade, Vaadin & Co 20
LimDul Spring Boot Anwendung "automatisch" neustarten Frameworks - Spring, Play, Blade, Vaadin & Co 3
A Spring boot Frameworks - Spring, Play, Blade, Vaadin & Co 18
bueseb84 Unit Test mit Spring Boot - Service Autowired Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand DTO <> Entity Hibernate Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 28
OnDemand Verständnisfrage DTO Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 19
OnDemand Spring Boot Load Balancing Frameworks - Spring, Play, Blade, Vaadin & Co 5
S Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Boot Threads Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Spring Boot: Wert aus Config Datei ermitteln Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Boot: Ein geschütztes Verzeichnis Frameworks - Spring, Play, Blade, Vaadin & Co 1
bueseb84 Probleme mit Spring Boot Docker und Bootstrap Frameworks - Spring, Play, Blade, Vaadin & Co 9
OnDemand Spring Boot Eureka/Zuul Frameworks - Spring, Play, Blade, Vaadin & Co 0
F Redirect in einer Spring Boot WebApplication Frameworks - Spring, Play, Blade, Vaadin & Co 7
B Erstes Spring Boot Projekt: Gameserver-Manager Frameworks - Spring, Play, Blade, Vaadin & Co 5
V Spring Boot, thymeleaf, Eingaben cashen oder per session speichern? Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Spring Boot Security Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Boot i18n Frameworks - Spring, Play, Blade, Vaadin & Co 28
bueseb84 Spring Boot : Update H2 Repository Frameworks - Spring, Play, Blade, Vaadin & Co 14
A Spring Boot/ OneToMany Relation Frameworks - Spring, Play, Blade, Vaadin & Co 29
S Spring Boot testen mit Service Klassen Frameworks - Spring, Play, Blade, Vaadin & Co 4
L Controller Spring Boot mit Java Frameworks - Spring, Play, Blade, Vaadin & Co 20
J Spring Boot H2 Datbase Frameworks - Spring, Play, Blade, Vaadin & Co 2
J Spring Boot Thymleaf mit Java.Optional Frameworks - Spring, Play, Blade, Vaadin & Co 0
L JavaFX Anwendung mit Spring Boot und mehrere FXML Forms Frameworks - Spring, Play, Blade, Vaadin & Co 5
P Mit Maven (und Spring-boot) ein FatJAR und ein EAR bauen Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand Spring Boot Basic Authentication langsam Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Start Stop Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
H Spring Boot - Dependency Injection Frameworks - Spring, Play, Blade, Vaadin & Co 26
B Java Spring Boot - POM-Problem Frameworks - Spring, Play, Blade, Vaadin & Co 8
OnDemand Spring Boot parallele Requests Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Boot Resttemplate exchange XML Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Root-Pfad zu meiner Spring Boot Application Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand Spring Boot Error Logging Frameworks - Spring, Play, Blade, Vaadin & Co 5

Ähnliche Java Themen

Neue Themen


Oben