Pokretanje Spring Boota s PostgreSQL-om u Docker Composeu
1. Uvod
U ovom uputstvu želimo pokrenuti Spring Boot aplikaciju s popularnom bazom podataka otvorenog koda PostgreSQL. U prethodnom članku, pogledali smo Docker Compose za obradu više spremnika odjednom. Dakle, umjesto da instalirate PostgreSQL kao zasebnu aplikaciju, koristit ćemo Docker Compose za pokretanje Spring Boota i PostgreSQL-a.
2. Izrada projekta Spring Boot
Idemo na Spring Initializer i stvorimo naš projekt Spring Boot. Mi ćemo dodati PostgreSQL upravljački program i Proljetni podaci JPA modula. Nakon što preuzmemo rezultirajuću ZIP datoteku i izdvojimo je u mapu, možemo pokrenuti našu novu aplikaciju:
./mvnw spring-boot: trčanje
Aplikacija ne uspije jer se ne može povezati s bazom podataka:
*************************** PRIJAVA NIJE USPELA ******************* ******** Opis: Nije uspjelo konfiguriranje izvora podataka: atribut 'url' nije naveden i nije moguće konfigurirati ugrađeni izvor podataka. Razlog: Nije uspjelo utvrditi prikladnu klasu vozača
3. Dockerfile
Prije nego što započnemo PostgreSQL s Docker Compose, moramo našu aplikaciju Spring Boot pretvoriti u Docker sliku. Prvi korak je pakiranje aplikacije u JAR datoteku:
./mvnw čist paket -DskipTests
Ovdje prvo čistimo prethodne verzije prije pakiranja aplikacije. Osim toga, preskačemo testove jer oni ne uspiju bez PostgreSQL-a.
Sada imamo datoteku JAR aplikacije u cilj imenik. Ta datoteka u nazivu ima naziv projekta i broj verzije i završava s -SNAPSHOT.jar. Tako bi moglo biti i njegovo ime docker-spring-boot-postgres-0.0.1-SNAPSHOT.jar.
Napravimo novo src / glavni / docker imenik. Nakon toga tamo kopiramo datoteku JAR aplikacije:
cp target / docker-spring-boot-postgres-0.0.1-SNAPSHOT.jar src / main / docker
Napokon, mi kreiramo ovo Dockerfile u istom direktoriju:
FROM Adotopenjdk: 11-jre-hotspot ARG JAR_FILE = *. Jar COPY $ {JAR_FILE} application.jar ENTRYPOINT ["java", "-jar", "application.jar"]
Ova datoteka opisuje kako Docker treba pokrenuti našu aplikaciju Spring Boot. Koristi Java 11 iz AdoptOpenJDK i kopira aplikacijsku JAR datoteku u prijava.jar. Zatim pokreće tu JAR datoteku za pokretanje naše aplikacije Spring Boot.
4. Docker Sastavi datoteku
Sada napišite našu Docker Compose datoteku, docker-compose.ymli spremite ga u src / glavni / docker:
verzija: '2' usluge: app: image: 'docker-spring-boot-postgres: najnovije' build: context:. container_name: app depends_on: - dB okruženje: - SPRING_DATASOURCE_URL = JDBC: PostgreSQL: // db: 5432 / Sastaviti-Postgres - SPRING_DATASOURCE_USERNAME = Sastaviti-Postgres - SPRING_DATASOURCE_PASSWORD = Sastaviti-Postgres - SPRING_JPA_HIBERNATE_DDL_AUTO = Ažuriranje DB: slika: „Postgres: 13.1- alpski 'naziv_kontejnera: db okruženje: - POSTGRES_USER = compose-postgres - POSTGRES_PASSWORD = compose-postgres
Ime naše aplikacije je app. To je prva od dvije usluge (redovi 4-15):
- Slika Spring Boot Dockera ima naziv docker-spring-boot-postgres: najnovije (redak 5). Docker gradi tu sliku iz Dockerfile u trenutnom direktoriju (retci 6-7)
- Naziv spremnika je app (redak 8). Ovisi o db usluga (linija 10). Zato počinje nakon db kontejner
- Naša aplikacija koristi db PostgreSQL spremnik kao izvor podataka (redak 12). Ime baze podataka, korisničko ime i lozinka su svi compose-postgres (redovi 12-14)
- Hibernate će automatski stvoriti ili ažurirati sve potrebne tablice baze podataka (redak 15)
Baza podataka PostgreSQL ima naziv db i druga je usluga (redovi 17-22):
- Koristimo PostgreSQL 13.1 (redak 18)
- Naziv spremnika je db (redak 19)
- Korisničko ime i lozinka su oboje compose-postgres (redovi 21-22)
5. Trčanje s Docker Composeom
Pokrenimo našu aplikaciju Spring Boot i PostgreSQL s Docker Compose:
docker-sastaviti
Prvo, ovo će izgraditi Docker Image za našu aplikaciju Spring Boot. Zatim će pokrenuti spremnik PostgreSQL. Konačno, pokrenut će našu aplikaciju Docker image. Ovaj put naša aplikacija dobro funkcionira:
Pokretanje DemoApplication v0.0.1-SNAPSHOT koristeći Javu 11.0.9 na f94e79a2c9fc s PID 1 (/application.jar pokrenut od root u /) [...] Završeno skeniranje spremišta podataka Spring za 28 ms. Pronađeno je 0 sučeljima JPA spremišta. [...] Započela DemoApplication za 4,751 sekundu (JVM radi za 6,512)
Kao što vidimo, Spring Data nije pronašao sučelje spremišta. To je točno - još ga nismo stvorili!
Ako želimo zaustaviti sve spremnike, prvo moramo pritisnuti [Ctrl-C]. Tada možemo zaustaviti Docker Compose:
docker-komponirati dolje
6. Stvaranje entiteta i spremišta kupaca
Da bismo koristili bazu podataka PostgreSQL u našoj aplikaciji, stvorit ćemo jednostavan entitet kupca:
@Entity @Table (name = "customer") javna klasa 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 Kupac ima generirani iskaznica atribut i dva obavezna atributa: ime i prezime.
Sada, možemo napisati sučelje spremišta za ovaj entitet:
javno sučelje CustomerRepository proširuje JpaRepository {}
Jednostavnim produženjem JpaRepository, nasljeđujemo metode za stvaranje i postavljanje upita Kupac entitet.
Napokon, u našoj ćemo se aplikaciji koristiti sljedećim metodama:
@SpringBootApplication javna klasa DemoApplication {@Autowired privatno spremište CustomerRepository; @EventListener (ApplicationReadyEvent.class) javna void runAfterStartup () {Popis svihCustomers = this.repository.findAll (); logger.info ("Broj kupaca:" + allCustomers.size ()); Kupac newCustomer = novi kupac (); newCustomer.setFirstName ("Ivan"); newCustomer.setLastName ("Doe"); logger.info ("Spremanje novog kupca ..."); this.repository.save (newCustomer); allCustomers = this.repository.findAll (); logger.info ("Broj kupaca:" + allCustomers.size ()); }}
- Pristupamo našem Kupac spremište putem injekcije ovisnosti
- Pomoću spremišta ispitujemo broj postojećih kupaca - to će biti nula
- Tada stvaramo i spašavamo kupca
- Kada zatim ponovo upitamo postojeće kupce, očekujemo da ćemo pronaći onoga koga smo upravo stvorili
7. Ponovno trčanje s Docker Compose
Da bismo pokrenuli ažurirani program Spring Boot, moramo ga obnoviti prvi. Stoga ove naredbe izvršavamo još jednom u korijenskom direktoriju projekta:
./mvnw čist paket -DskipTests cp target / docker-spring-boot-postgres-0.0.1-SNAPSHOT.jar src / main / docker
Kako obnoviti našu Docker sliku s ovom ažuriranom JAR datotekom aplikacije? Najbolji način je ukloniti postojeću Dockerovu sliku čije smo ime naveli u docker-compose.yml. To prisiljava Dockera da ponovo izgradi sliku sljedeći put kada pokrenemo našu Docker Compose datoteku:
cd src / main / docker docker-compose down docker rmi docker-spring-boot-postgres: najnoviji docker-compose up
Dakle, nakon zaustavljanja naših spremnika, brišemo sliku aplikacije Docker. Zatim ponovno pokrećemo našu Docker Compose datoteku koja ponovno gradi sliku aplikacije.
Evo rezultata aplikacije:
Završeno skeniranje spremišta podataka Spring za 180 ms. Pronađeno je 1 sučelja JPA spremišta. [...] Broj kupaca: 0 Spremanje novog kupca ... Broj kupaca: 1
Spring Boot pronalazi naše prazno spremište kupaca. Stoga započinjemo bez kupca, ali ga zatim uspješno stvaramo.
8. Zaključak
U ovom kratkom vodiču započeli smo sa izradom Spring Boot aplikacije za PostgreSQL. Dalje, napisali smo datoteku Docker Compose da bismo pokrenuli naš spremnik aplikacije s PostgreSQL spremnikom.
Konačno, stvorili smo korisnički entitet i spremište, koji su nam omogućili spremanje kupca u PostgreSQL.
Kao i obično, izvorni kod za ovu lekciju možete pronaći na GitHubu.