{"id":185,"date":"2024-01-24T23:22:59","date_gmt":"2024-01-24T22:22:59","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=185"},"modified":"2024-01-24T23:23:00","modified_gmt":"2024-01-24T22:23:00","slug":"datenbankmigration-mit-flyway-in-einer-spring-boot-anwendung","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=185","title":{"rendered":"Datenbankmigration mit Flyway in einer Spring Boot Anwendung"},"content":{"rendered":"\n<p>Die Datenbankmigration ist ein wesentlicher Bestandteil moderner Softwareentwicklung, insbesondere wenn es um die Verwaltung von Datenbankschemata geht. Dabei spielt das effiziente und fehlerfreie Aktualisieren von Datenbanken eine zentrale Rolle. In diesem Artikel werden wir uns auf die Verwendung von Flyway in einer Spring Boot Anwendung konzentrieren, um Datenbankmigrationen zu automatisieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Einf\u00fchrung<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Warum Datenbankmigration?<\/h3>\n\n\n\n<p>Datenbankmigration ist der Prozess der Aktualisierung einer Datenbank von einer Version zur n\u00e4chsten. Dies ist unerl\u00e4sslich, um die Datenbankstruktur an \u00c4nderungen im Anwendungscode anzupassen, neue Funktionen hinzuzuf\u00fcgen oder bestehende zu verbessern. Ohne eine effiziente Migrationsstrategie k\u00f6nnen Inkonsistenzen und Fehler auftreten, die die Anwendungsleistung beeintr\u00e4chtigen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Warum Flyway?<\/h3>\n\n\n\n<p>Flyway ist ein Open-Source-Tool, das speziell f\u00fcr die Verwaltung von Datenbankmigrationen entwickelt wurde. Es erm\u00f6glicht eine einfache Integration in verschiedene Projekte und unterst\u00fctzt eine Vielzahl von Datenbanken. Flyway verwendet SQL-Skripte, um Migrationen zu definieren, und bietet eine transparente Art und Weise, diese in Anwendungen zu integrieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Konfiguration in einer Spring Boot Anwendung<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Maven-Abh\u00e4ngigkeiten<\/h3>\n\n\n\n<p>Um Flyway in einer Spring Boot Anwendung zu verwenden, m\u00fcssen die entsprechenden Maven-Abh\u00e4ngigkeiten hinzugef\u00fcgt werden. F\u00fcgen Sie die folgenden Zeilen zur <code>pom.xml<\/code>-Datei hinzu:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>org.springframework.boot<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>spring-boot-starter-data-jpa<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>org.flywaydb<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>flyway-core<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependency<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Diese Abh\u00e4ngigkeiten erm\u00f6glichen die Integration von Spring Data JPA und Flyway.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">application.properties<\/h3>\n\n\n\n<p>In der <code>application.properties<\/code>-Datei m\u00fcssen die Datenbankverbindungsinformationen und Flyway-spezifische Konfigurationen festgelegt werden:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Datenbankkonfiguration<\/span>\nspring.datasource.url=jdbc:mysql:<span class=\"hljs-comment\">\/\/localhost:3306\/meinedatenbank<\/span>\nspring.datasource.username=benutzername\nspring.datasource.password=passwort\n\n<span class=\"hljs-comment\"># Flyway-Konfiguration<\/span>\nspring.flyway.url=jdbc:mysql:<span class=\"hljs-comment\">\/\/localhost:3306\/meinedatenbank<\/span>\nspring.flyway.user=benutzername\nspring.flyway.password=passwort<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Hier m\u00fcssen Sie die richtigen Werte f\u00fcr Ihre Datenbankverbindung angeben.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">SQL-Skripte erstellen<\/h3>\n\n\n\n<p>Flyway verwendet SQL-Skripte, um Migrationen zu definieren. Diese Skripte sollten im <code>src\/main\/resources\/db\/migration<\/code>-Verzeichnis platziert werden. Der Dateiname sollte dem Muster <code>V&lt;Version&gt;__&lt;Beschreibung&gt;.sql<\/code> folgen. Zum Beispiel: <code>V1__Erste_Migration.sql<\/code>.<\/p>\n\n\n\n<p>Ein Beispiel-SQL-Skript k\u00f6nnte so aussehen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">--<\/span> <span class=\"hljs-selector-tag\">V1__Erste_Migration<\/span><span class=\"hljs-selector-class\">.sql<\/span>\n\n<span class=\"hljs-selector-tag\">CREATE<\/span> <span class=\"hljs-selector-tag\">TABLE<\/span> <span class=\"hljs-selector-tag\">benutzer<\/span> (\n    <span class=\"hljs-selector-tag\">id<\/span> <span class=\"hljs-selector-tag\">INT<\/span> <span class=\"hljs-selector-tag\">PRIMARY<\/span> <span class=\"hljs-selector-tag\">KEY<\/span>,\n    <span class=\"hljs-selector-tag\">vorname<\/span> <span class=\"hljs-selector-tag\">VARCHAR<\/span>(50),\n    <span class=\"hljs-selector-tag\">nachname<\/span> <span class=\"hljs-selector-tag\">VARCHAR<\/span>(50)\n);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Flyway in der Anwendung aktivieren<\/h3>\n\n\n\n<p>Um Flyway in einer Spring Boot Anwendung zu aktivieren, k\u00f6nnen Sie einfach die <code>@EnableFlyway<\/code>-Annotation zu Ihrer Hauptanwendungsklasse hinzuf\u00fcgen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> org.springframework.boot.SpringApplication;\n<span class=\"hljs-keyword\">import<\/span> org.springframework.boot.autoconfigure.SpringBootApplication;\n<span class=\"hljs-keyword\">import<\/span> org.flywaydb.core.Flyway;\n\n@SpringBootApplication\n@EnableFlyway\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MeineAnwendung<\/span> <\/span>{\n\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        SpringApplication.run(MeineAnwendung.class, args);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Durchf\u00fchrung von Datenbankmigrationen<\/h2>\n\n\n\n<p>Nachdem die Konfiguration abgeschlossen ist, k\u00f6nnen Sie die Datenbankmigrationen durchf\u00fchren, indem Sie Ihre Spring Boot Anwendung starten. Flyway wird automatisch erkannte Migrationen anwenden und das Datenbankschema entsprechend aktualisieren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Anwendungsstart<\/h3>\n\n\n\n<p>Starten Sie Ihre Anwendung entweder \u00fcber die IDE oder mithilfe des Maven-Befehls:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">spring-boot<\/span><span class=\"hljs-selector-pseudo\">:run<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Flyway wird w\u00e4hrend des Startvorgangs gestartet und f\u00fchrt alle gefundenen Migrationen aus.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00dcberpr\u00fcfen von Migrationen<\/h3>\n\n\n\n<p>Um sicherzustellen, dass die Migrationen erfolgreich durchgef\u00fchrt wurden, k\u00f6nnen Sie die Datenbank manuell \u00fcberpr\u00fcfen oder auf die Flyway-Migrationstabelle zugreifen. Flyway erstellt automatisch eine Tabelle namens <code>flyway_schema_history<\/code>, die Informationen zu den durchgef\u00fchrten Migrationen enth\u00e4lt.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">SELECT * FROM flyway_schema_history;<\/code><\/span><\/pre>\n\n\n<p>Dieses Statement gibt eine Liste der durchgef\u00fchrten Migrationen mit Details wie Version, Beschreibung und Ausf\u00fchrungszeitpunkt zur\u00fcck.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Best Practices und Tipps<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sicherungen erstellen:<\/strong> Bevor Sie eine Migration auf eine Produktionsdatenbank anwenden, ist es ratsam, eine Sicherung zu erstellen, um im Falle eines Problems auf einen vorherigen Zustand zur\u00fcckgreifen zu k\u00f6nnen.<\/li>\n\n\n\n<li><strong>Versionskontrolle:<\/strong> Verwenden Sie ein Versionskontrollsystem wie Git, um Ihre SQL-Skripte zu verwalten. Dies erleichtert die Zusammenarbeit und das Rollback auf fr\u00fchere Versionen.<\/li>\n\n\n\n<li><strong>Klare Beschreibungen:<\/strong> Geben Sie Ihren Migrationen aussagekr\u00e4ftige Beschreibungen, damit Sie sp\u00e4ter leicht nachvollziehen k\u00f6nnen, welche \u00c4nderungen vorgenommen wurden.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Die Verwendung von Flyway in einer Spring Boot Anwendung vereinfacht den Prozess der Datenbankmigration erheblich. Die klare Struktur von SQL-Skripten und die nahtlose Integration mit Spring Boot machen es zu einer beliebten Wahl in der Entwicklergemeinschaft. Durch die Automatisierung von Datenbankmigrationen mit Flyway k\u00f6nnen Entwickler Zeit sparen und sicherstellen, dass ihre Anwendungen immer auf dem neuesten Stand sind.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Datenbankmigration ist ein wesentlicher Bestandteil moderner Softwareentwicklung, insbesondere wenn es um die Verwaltung von Datenbankschemata geht. Dabei spielt das effiziente und fehlerfreie Aktualisieren von Datenbanken eine zentrale Rolle. In diesem Artikel werden wir uns auf die Verwendung von Flyway in einer Spring Boot Anwendung konzentrieren, um Datenbankmigrationen zu automatisieren. Einf\u00fchrung Warum Datenbankmigration? Datenbankmigration ist [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-185","post","type-post","status-publish","format-standard","hentry","category-spring"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=185"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/185\/revisions"}],"predecessor-version":[{"id":186,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/185\/revisions\/186"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}