Kopiowanie tablic do bazy danych

0

Hola,
Mam mały problem. Pracuję nad aplikacją w SpringBoocie. Standardowa apka restowa. W application-local.properties propertisy dla postgresa wyglądają tak:

spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.hikari.driver-class-name=org.postgresql.Driver
spring.datasource.hikari.maxLifetime=600000
spring.datasource.url=jdbc:postgresql://x.x.x.x:5432/backend_db
spring.datasource.username=user_backend
spring.datasource.password=yyyy

ten x.x.x.x to jest jakiś remote server. A chciałbym tak zmienić propertisy (bo chyba tutaj to się robi?), żeby podczas runa do localhost:5432/backend_db kopiował mi zawartość tablic. Jak to się robi? Widziałem niedawno appkę podobną, jak ją odpaliłem, to pultał się, że na localhoście nie ma takiej i takiej bazy danych, jak ją utworzyłem i odpaliłem jeszcze raz to skopiował mi tam lokalnie wszystkie tablice. Jak taki efekt osiągnąć?

0

Po pierwsze i najważniejsze - takie standardowe użycie Springa zakłada, że masz statycznie zdefiniowane bazy danych. Zakładając, że wszystkie bazy danych, na których operujesz z góry znasz to bym po prostu:

  1. Stworzył te N datasource'ów : https://www.baeldung.com/spring-boot-configure-multiple-datasources.
  2. Oznaczył te beany datasource'owe odpowiednimi nazwami: https://www.baeldung.com/spring-getbean
  3. Napisał metodę copyTablesFromDatasource(datasource) (pewnie w oddzielnym serwisie), która wykona za mnie robotę
  4. Jak ktoś podbija do endpointa to wyciągałbym to z kontekstu (patrz link z pkt. 2).

To takie najprostsze, ale wcale niepozbawione minusów podejście. Pkt. 2 do dyskusji bo to by oznaczało trzymanie konfiguracji w dwóch miejscach (w propertiesach oraz springowym configu).
Znając życie to pewnie oszczędziłbym sobie kłopotu tworząc te źródła danych dynamicznie, tj. jak ktoś podbije do https://x.x.x.x/dbName to wołana by była metoda DataSource acquireDatasource(dbName), która by wyciągała propertiesy z spring.datasource.dbName i tworzyła odpowiedni obiekt klasy DataSource.

Natomiast jeśli myślisz o takiej sytuacji, że aplikacja nie ma żadnego pojęcia z jakiej bazy danych trzeba wyciągać dane to tutaj robi się jednocześnie łatwiej, i trudniej. Łatwiej, bo odpadają te propertiesy itp., a całość informacji o bazie danych (typu password, user itp.) szła by z zewnątrz. Trudniej, bo wtedy trzeba by było na 100% tworzyć te DataSource dynamicznie, no i trzeba by jakoś pomyśleć o tym, żeby nikt nie był w stanie przechwycić hasła i nazwy użytkownika.

1 użytkowników online, w tym zalogowanych: 0, gości: 1