Automatyczne inicjowanie tabel Quartz Schedulera
Próbując stworzyć ostatnio prosty projekt, a w zasadzie sam template - natknąłem się na kilka problemów.
Chciałem, aby FlyWay na start dla mojego projektu od razu tworzył wymagane przez Quartz Scheduler tabele, abym ja nie musiał podczas czyszczenia czy stawiania projektu od nowa wykonywać żmudnych czynności typu tworzenie tabel. Niestety spring-boot-starter-quartz tej czynności za nas nie zrobi (lub może ja przeoczyłem jakieś docs’y). W każdym razie lubię mięc kontrolę nad swoim środowiskiem i w łatwy sposób mieć możliwość postawić je na nowo, dlatego takie podstawowe inicjowanie projektu to dla mnie “must have”.
Potrzebowałem na start prosty projekt Spring, takowy więc wygenerowałem poprzez Spring Initializr.
Ostatecznie nie mogłem go uruchomić, aby spełniał poniższe warunki:
- Baza danych stawiana lokalnie na dockerze
- Spring 2.7.6
- Spring Boot Starter Quartz
- FlyWay
Niestety flyway odmawiał posłuszeństwa wypluwając mi poniższy błąd:
[ERROR] Failed to execute goal org.flywaydb:flyway-maven-plugin:9.8.3:migrate (default) on project face-photo-manager: org.flywaydb.core.api.FlywayException: No database found to handle jdbc:mysql://localhost:3306/pubrom -> [Help 1] |
W trakcie zdecydowałem się przerzucić z MySQL’a na MariaDB. W okolicach listopada 2022 przenoszone były biblioteki mvn i był to główny powód, który zniechęcił mnie do szukania driverów oraz bibliotek…
EDIT (2022-12-11): W dodatku podobny problem miałem podczas używania DBeaver’a kiedy w pewnym momencie w trakcie pracy w projekcie komercyjnym zaczęło mi wyskakiwać mnóstwo błędów (tutaj dodam, że DBeaver aktualizuje mi się przez snap’a - więc zazwyczaj taka aktualizacja jest opóźniona - a sam nie lubię się bawić w downgrade’y)
Co się zmieniło?
mysql » mysql-connector-java
Został przeniesiony do:
com.mysql » mysql-connector-j
Dla projektu wymagana była oczywiście podstawowa konfiguracja poniższego pluginu (lub zdefiniowanie tych samych właściwości w application.properties):
<plugin> |
EDIT (2022-12-11): Osobiście przy moim małym niekomercyjnym projekcie zdecydowałem, że prościej jednak wykorzystywać properties, a samego pom.xml mieć czystszego bez nadmiaru wpakowanych pluginów, których w rzeczywistości i tak są mi zbędne. Więc poniższy plugin ostatecznie wyleciał z mojego pom’a.
Posiadałem w pom.xml podstawowe zależności:
<dependency> |
Jednak rozwiązaniem okazał się brak w pom.xml dodatkowej zależności odnoszącej się do mysql:
<dependency> |
EDIT (2022-12-11): Dodanie tej zależnosci wbrew pozorom nie jest wcale oczywiste przy używaniu MariaDB. Ciekawe swoją drogą czy jest on również wymagany przy korzystaniu z np. PostgreSQL - lub może trzeba dodać inną dedykowaną zależność pod innego typu bazę danych)
Poniżej umieszczam przydatne pliki konfiguracyjne, od których można startować tworząc nowy projekt:
GITHUB GIST: https://gist.github.com/Grala96/65e3d60b0984ca1656cffb0d84bbf2e0
Automatyczne inicjowanie tabel Quartz Schedulera
https://grala96.gitlab.io/kernel-panic/6f6de2a6-79b4-11ed-9f3a-35cb7fdbd076/