Tavaszi indítás futtatása a PostgreSQL segítségével a Docker Compose alkalmazásban

1. Bemutatkozás

Ebben az oktatóprogramban egy Spring Boot alkalmazást szeretnénk futtatni a népszerű nyílt forráskódú PostgreSQL adatbázissal. Egy előző cikkben megnéztük a Docker Compose-ot, hogy egyszerre több konténert kezeljünk. Tehát ahelyett, hogy a PostgreSQL-t külön alkalmazásként telepítené, a Docker Compose programot fogjuk használni a Spring Boot és a PostgreSQL futtatásához.

2. A tavaszi indító projekt létrehozása

Menjünk a Spring Initializer-hez, és készítsük el a Spring Boot projektünket. Hozzáadjuk a PostgreSQL illesztőprogram és Spring Data JPA modulok. Miután letöltöttük a kapott ZIP fájlt és kibontottuk egy mappába, futtathatjuk új alkalmazásunkat:

./mvnw spring-boot: fuss

Az alkalmazás sikertelen, mert nem tud csatlakozni az adatbázishoz:

**************************************************************************************************** ******** Leírás: Nem sikerült konfigurálni a DataSource-t: az 'url' attribútum nincs megadva, és nem lehet beágyazott adatforrást konfigurálni. Ok: Nem sikerült meghatározni a megfelelő vezetőosztályt 

3. Dockerfile

Mielőtt elindíthatnánk a PostgreSQL-t a Docker Compose alkalmazással, a Spring Boot alkalmazást Docker képpé kell alakítanunk. Az első lépés az alkalmazás JAR fájlként történő csomagolása:

./mvnw tiszta csomag -DskipTests

Itt először az alkalmazás csomagolása előtt tisztítjuk meg korábbi építményeinket. Ezenkívül kihagyjuk a teszteket, mert a PostgreSQL nélkül kudarcot vallanak.

Most van egy alkalmazás JAR fájl a cél Könyvtár. Ennek a fájlnak a neve és a projekt neve a verziószámmal végződik -SNAPSHOT.jar. Tehát a neve lehet docker-spring-boot-postgres-0.0.1-SNAPSHOT.jar.

Készítsük el az újat src / main / docker Könyvtár. Ezt követően átmásoljuk az alkalmazás JAR fájlját:

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

Végül létrehozzuk ezt Dockerfile ugyanabban a könyvtárban:

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

Ez a fájl leírja, hogy a Docker hogyan futtassa a Spring Boot alkalmazást. A Java 11 szoftvert használja az AdoptOpenJDK alkalmazásból, és az alkalmazás JAR fájlját másolja alkalmazás.jar. Ezután futtatja azt a JAR fájlt a Spring Boot alkalmazás elindításához.

4. Docker Compose File

Most írjuk meg a Docker Compose fájlt, dokkoló-összeállít.yml, és mentse be src / main / docker:

verzió: '2' services: app: image: 'docker-spring-boot-postgres: latest' build: context:. container_name: alkalmazás függ_on: - db környezet: - SPRING_DATASOURCE_URL = jdbc: postgresql: // db: 5432 / compose-postgres - SPRING_DATASOURCE_USERNAME = compose-postgres - SPRING_DATASOURCE_PASSWORD = SPOSTER_DATE_DOS_POSE_JELENY: POSZT_JELENY: Hozzászólás_dokumentum: POSZT_JELENY: Hozzászólás_dátum: POSZT_JEGYZET: POSZT_JELENY: Hozzászólás_kép: alpine 'container_name: db környezet: - POSTGRES_USER = compose-postgres - POSTGRES_PASSWORD = compose-postgres

Az alkalmazásunk neve kb. Ez a két szolgáltatás közül az első (4–15. sor):

  • A Spring Boot Docker kép neve a docker-spring-boot-postgres: legújabb (5. sor). Docker ezt a képet a Dockerfile az aktuális könyvtárban (6-7. sor)
  • A tároló neve: kb (8. sor). Attól függ db szolgáltatás (10. sor). Ezért kezdődik a db tartály
  • Alkalmazásunk a db PostgreSQL tároló adatforrásként (12. sor). Az adatbázis neve, a felhasználónév és a jelszó egyaránt compose-postgres (12–14. sor)
  • A hibernálás automatikusan létrehozza vagy frissíti a szükséges adatbázis-táblákat (15. sor)

A PostgreSQL adatbázis neve db és a második szolgáltatás (17–22. sor):

  • PostgreSQL 13.1-et használunk (18. sor)
  • A tároló neve: db (19. sor)
  • A felhasználói név és a jelszó egyaránt compose-postgres (21–22. sor)

5. Futás a Docker Compose alkalmazással

Futtassuk a Spring Boot alkalmazást és a PostgreSQL-t a Docker Compose alkalmazással:

dokkoló-összeáll

Először ez építi fel a Docker Image alkalmazást a Spring Boot alkalmazáshoz. Ezután elindítja a PostgreSQL tárolót. Végül elindítja a Docker image alkalmazást. Ezúttal az alkalmazásunk jól működik:

A DemoApplication v0.0.1-SNAPSHOT indítása a Java 11.0.9 használatával az f94e79a2c9fc fájlon PID 1-vel (/application.jar root által elindítva a / ban) [...] 28 ms alatt befejeződött a Spring Data repository szkennelése. Talált 0 JPA repository interfészt. [...] 4,751 másodperc alatt elindította a DemoApplication alkalmazást (a JVM 6,512-ig fut)

Mint láthatjuk, a Spring Data nem talált tárházi felületet. Ez helyes - még nem hoztunk létre egyet!

Ha le akarjuk állítani az összes konténert, akkor először a [Ctrl-C] gombot kell megnyomnunk. Ezután leállíthatjuk a Docker Compose programot:

dokkoló-komponálj le

6. Ügyfél entitás és adattár létrehozása

A PostgreSQL adatbázis használatához alkalmazásunkban létrehozunk egy egyszerű ügyfél entitást:

@Entity @Table (name = "customer") public class Customer {@Id @GeneratedValue private long id; @ Oszlop (név = "keresztnév", nullable = hamis) privát karakterlánc keresztnév; @ Oszlop (név = "vezetéknév", nullable = hamis) privát karakterlánc vezetéknév;

A Vevő generált id attribútum és két kötelező attribútum: keresztnév és vezetéknév.

Most, megírhatjuk ennek az entitásnak a tároló felületét:

nyilvános felület A CustomerRepository kiterjeszti a JpaRepository {}

Egyszerűen meghosszabbítva JpaRepository, örököljük a módszerek létrehozását és lekérdezését Vevő entitás.

Végül ezeket a módszereket fogjuk használni alkalmazásunkban:

@SpringBootApplication public class DemoApplication {@Autowired private CustomerRepository repository; @EventListener (ApplicationReadyEvent.class) public void runAfterStartup () {List allCustomers = this.repository.findAll (); logger.info ("Ügyfelek száma:" + allCustomers.size ()); Ügyfél newCustomer = új Ügyfél (); newCustomer.setFirstName ("John"); newCustomer.setLastName ("Doe"); logger.info ("Új ügyfél mentése ..."); this.repository.save (newCustomer); allCustomers = this.repository.findAll (); logger.info ("Ügyfelek száma:" + allCustomers.size ()); }}
  • Hozzáférünk a mi Vevő adattár függőségi injekcióval
  • Megkérdezzük a meglévő ügyfelek számát az adattárral - ez nulla lesz
  • Ezután létrehozunk és megmentünk egy ügyfelet
  • Amikor ezután újra megkérdezzük a meglévő ügyfeleket, akkor elvárjuk, hogy megtaláljuk az imént létrehozottakat

7. Futás a Docker Compose Again alkalmazással

A frissített Spring Boot alkalmazás futtatásához újra kell építenünk első. Ezért ezeket a parancsokat még egyszer végrehajtjuk a projekt gyökérkönyvtárában:

./mvnw tiszta csomag -DskipTests cp target / docker-spring-boot-postgres-0.0.1-SNAPSHOT.jar src / main / docker

Hogyan építhetjük fel Docker képünket ezzel a frissített alkalmazás JAR-fájllal? A legjobb módszer a meglévő Docker-kép eltávolítása, amelynek nevét a dokkoló-összeállít.yml. Ez arra kényszeríti a Docker-t, hogy a Docker Compose fájl következő indításakor újra elkészítse a képet:

cd src / main / docker docker-compose down dokkoló rmi docker-spring-boot-postgres: legújabb docker-compose up

Tehát a tárolók leállítása után töröljük a Docker image alkalmazást. Ezután újra elindítjuk a Docker Compose fájlt, amely újjáépíti az alkalmazás képét.

Itt van az alkalmazás kimenete:

180 ms alatt befejeződött a tavaszi adattár keresése. Talált 1 JPA adattár interfészt. [...] Ügyfelek száma: 0 Új ügyfél mentése ... Ügyfelek száma: 1

A Spring Boot megtalálja az üres ügyféltárunkat. Ezért nem vevővel indulunk, de aztán sikeresen létrehozunk egyet.

8. Következtetés

Ebben a rövid bemutatóban egy Spring Boot alkalmazás létrehozásával kezdtük a PostgreSQL-t. Ezután írtunk egy Docker Compose fájlt, hogy futtassuk az alkalmazás-tárolónkat egy PostgreSQL-tárolóval.

Végül létrehoztunk egy ügyfél entitást és adattárat, amely lehetővé tette számunkra az ügyfelek mentését a PostgreSQL-be.

Szokás szerint az oktatóanyag forráskódja megtalálható a GitHubon.