Spustenie Spring Boot s PostgreSQL v Docker Compose

1. Úvod

V tomto tutoriále chceme spustiť aplikáciu Spring Boot s populárnou open-source databázou PostgreSQL. V predchádzajúcom článku pozreli sme sa na Docker Compose, aby sme zvládli viac kontajnerov naraz. Namiesto inštalácie PostgreSQL ako samostatnej aplikácie teda použijeme Docker Compose na spustenie Spring Boot a PostgreSQL.

2. Vytvorenie projektu Spring Boot

Poďme na Spring Initializer a vytvorme náš projekt Spring Boot. Pridáme Ovládač PostgreSQL a Jarné údaje JPA modulov. Po stiahnutí výsledného súboru ZIP a jeho rozbalení do priečinka môžeme spustiť našu novú aplikáciu:

./mvnw spring-boot: spustiť

Aplikácia zlyhá, pretože sa nemôže pripojiť k databáze:

**************************** APLIKÁCIA SA SPUSTILA ***************** ******** Popis: Nepodarilo sa nakonfigurovať zdroj údajov: atribút „url“ nie je zadaný a nemožno nakonfigurovať žiadny vložený zdroj údajov. Dôvod: Nepodarilo sa určiť vhodnú triedu vodiča 

3. Dockerfile

Skôr ako môžeme spustiť PostgreSQL s Docker Compose, musíme našu aplikáciu Spring Boot zmeniť na obrázok Dockeru. Prvým krokom je zabalenie aplikácie do súboru JAR:

./mvnw čistý balík -DskipTests

Tu najskôr vyčistíme naše predchádzajúce verzie pred zabalením aplikácie. Okrem toho preskakujeme testy, pretože bez PostgreSQL zlyhajú.

Teraz máme súbor JAR aplikácie v cieľ adresár. Tento súbor má v názve názov projektu a číslo verzie a končí sa -SNAPSHOT.jar. Takže jeho názov by mohol byť docker-spring-boot-postgres-0.0.1-SNAPSHOT.jar.

Poďme vyrobiť nový src / main / docker adresár. Potom tam skopírujeme súbor JAR aplikácie:

cp target / docker-spring-boot-postgres-0.0.1-SNAPSHOT.jar src / main / docker

Nakoniec to vytvoríme Dockerfile v rovnakom adresári:

Z adoptopenjdk: 11-jre-hotspot ARG JAR_FILE = *. Jar COPY $ {JAR_FILE} application.jar ENTRYPOINT ["java", "-jar", "application.jar"]

Tento súbor popisuje, ako by mal Docker spustiť našu aplikáciu Spring Boot. Používa Java 11 z AdoptOpenJDK a kopíruje súbor JAR aplikácie application.jar. Potom spustí tento súbor JAR a spustí našu aplikáciu Spring Boot.

4. Docker Compose File

Teraz napíšeme náš súbor Docker Compose, docker-compose.ymla uložiť do src / main / docker:

verzia: „2“ služby: aplikácia: obrázok: „docker-spring-boot-postgres: latest“ build: context:. container_name: app depends_on: - db environment: - SPRING_DATASOURCE_URL = jdbc: postgresql: // db: 5432 / compose-postgres - SPRING_DATASOURCE_USERNAME = compose-postgres - SPRING_DATASOURCE_PASSWORD = compose-postgres - SPRING_J__DATA: alpské 'container_name: db prostredie: - POSTGRES_USER = compose-postgres - POSTGRES_PASSWORD = compose-postgres

Názov našej aplikácie je aplikácia Je to prvá z dvoch služieb (riadky 4-15):

  • Obrázok Spring Boot Docker má názov docker-spring-boot-postgres: najnovšie (riadok 5). Docker vytvára tento obrázok z Dockerfile v aktuálnom adresári (riadky 6-7)
  • Názov kontajnera je aplikácia (riadok 8). Závisí to od db služba (linka 10). Preto sa to začína po db kontajner
  • Naša aplikácia používa db Kontajner PostgreSQL ako zdroj údajov (riadok 12). Názov databázy, meno používateľa a heslo sú všetky compose-postgres (riadky 12-14)
  • Hibernate automaticky vytvorí alebo aktualizuje všetky potrebné databázové tabuľky (riadok 15)

Názov má databáza PostgreSQL db a je druhou službou (riadky 17-22):

  • Používame PostgreSQL 13.1 (riadok 18)
  • Názov kontajnera je db (riadok 19)
  • Používateľské meno a heslo sú obe compose-postgres (riadky 21-22)

5. Beh s programom Docker Compose

Spustime našu aplikáciu Spring Boot a PostgreSQL s Docker Compose:

ukotviť-zložiť

Najskôr sa tým vytvorí obraz Docker pre našu aplikáciu Spring Boot. Ďalej spustí kontajner PostgreSQL. Nakoniec spustí našu aplikáciu Docker image. Tentokrát naša aplikácia funguje dobre:

Spustenie DemoApplication v0.0.1-SNAPSHOT pomocou Java 11.0.9 na f94e79a2c9fc s PID 1 (/application.jar spustený rootom v /) [...] Dokončenie skenovania jarných dátových úložísk za 28 ms. Našlo sa 0 rozhraní úložiska JPA. [...] Spustil DemoApplication za 4.751 sekúnd (JVM beží za 6.512)

Ako vidíme, Spring Data nenašli žiadne rozhranie úložiska. Je to správne - zatiaľ sme žiadny nevytvorili!

Ak chceme zastaviť všetky kontajnery, musíme najskôr stlačiť [Ctrl-C]. Potom môžeme Docker Compose zastaviť:

ukotviť-zložiť

6. Vytvorenie zákazníckej entity a úložiska

Ak chcete v našej aplikácii používať databázu PostgreSQL, vytvoríme jednoduchú entitu zákazníka:

@Entity @Table (name = "customer") verejná trieda Customer {@Id @GeneratedValue private long id; @Column (name = "first_name", nullable = false) private String firstName; @Column (name = "last_name", nullable = false) private String lastName;

The Zákazník má vygenerovaný id atribút a dva povinné atribúty: krstné meno a priezvisko.

Teraz, pre túto entitu môžeme napísať rozhranie úložiska:

verejné rozhranie CustomerRepository rozširuje JpaRepository {}

Jednoduchým predĺžením JpaRepository, dedíme metódy na vytváranie a dopytovanie našich Zákazník subjekt.

Nakoniec v našej aplikácii použijeme tieto metódy:

@SpringBootApplication verejná trieda DemoApplication {@Autowired súkromné ​​úložisko CustomerRepository; @EventListener (ApplicationReadyEvent.class) public void runAfterStartup () {List allCustomers = this.repository.findAll (); logger.info ("Počet zákazníkov:" + allCustomers.size ()); Customer newCustomer = new Customer (); newCustomer.setFirstName ("John"); newCustomer.setLastName ("Srnka"); logger.info ("Ukladanie nového zákazníka ..."); this.repository.save (newCustomer); allCustomers = this.repository.findAll (); logger.info ("Počet zákazníkov:" + allCustomers.size ()); }}
  • Pristupujeme k nášmu Zákazník úložisko prostredníctvom vstrekovania závislostí
  • Dotazujeme sa na počet existujúcich zákazníkov s úložiskom - toto bude nula
  • Potom vytvoríme a zachránime zákazníka
  • Keď potom znova zadáme dopyt existujúcim zákazníkom, očakávame, že nájdeme práve vytvoreného zákazníka

7. Beh s Docker Compose Again

Ak chcete spustiť aktualizovanú aplikáciu Spring Boot, musíme ju znova vytvoriť najprv. Preto tieto príkazy vykonáme ešte raz v koreňovom adresári projektu:

./mvnw čistý balík -DskipTests cieľ cp / docker-spring-boot-postgres-0.0.1-SNAPSHOT.jar src / main / docker

Ako obnovíme náš obraz Docker pomocou tohto aktualizovaného súboru JAR aplikácie? Najlepším spôsobom je odstrániť existujúci obrázok Dockeru, ktorého meno sme zadali v priečinku docker-compose.yml. To prinúti Dockera znovu vytvoriť obraz, keď nabudúce spustíme náš súbor Docker Compose:

cd src / main / docker docker-compose down docker rmi docker-spring-boot-postgres: posledný docker-compose up

Po zastavení našich kontajnerov teda odstránime obrázok aplikácie Docker. Potom znova spustíme náš súbor Docker Compose, ktorý znova vytvorí obraz aplikácie.

Tu je výstup aplikácie:

Skenovanie úložiska jarných údajov bolo dokončené za 180 ms. Nájdené 1 rozhrania úložiska JPA. [...] Počet zákazníkov: 0 Uloženie nového zákazníka ... Počet zákazníkov: 1

Spring Boot nájde naše prázdne úložisko zákazníkov. Preto začneme bez zákazníka, ale potom ho úspešne vytvoríme.

8. Záver

V tomto krátkom tutoriáli sme začali tvorbou aplikácie Spring Boot pre PostgreSQL. Ďalej sme napísali súbor Docker Compose na spustenie nášho aplikačného kontajnera s kontajnerom PostgreSQL.

Nakoniec sme vytvorili zákaznícku entitu a úložisko, ktoré nám umožnili uložiť zákazníka do PostgreSQL.

Ako obvykle, zdrojový kód tohto tutoriálu nájdete na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found