Fix docker example

This commit is contained in:
Yuriy Dvorzhetskiy
2021-07-05 02:49:27 +06:00
parent 8d2ad112d2
commit 43dce19a82
7 changed files with 116 additions and 69 deletions
@@ -7,15 +7,16 @@ services:
privileged: true
ports:
- "8080:8080"
# Эти свойства перегружают соответствующие в application.yml
environment:
- DB_DRIVER=org.postgresql.Driver
- DB_URL=jdbc:postgresql://postgres:5432/db
- DB_USERNAME=postgres
- DB_PASSWORD=postgres
- WAIT_FOR=postgres:5432
- SPRING_DATASOURCE_DRIVER_CLASS_NAME=org.postgresql.Driver
- SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/db
- SPRING_DATASOURCE_USERNAME=postgres
- SPRING_DATASOURCE_PASSWORD=postgres
networks:
- nw
postgres:
# В идеале должна быть ещё и версия image
image: "postgres"
ports:
- "5432:5432"
@@ -1,66 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>ru.otus.spring</groupId>
<artifactId>docker-compose-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>docker-compose-example</name>
<description>Demo project for Spring Boot</description>
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.1</version>
<relativePath/>
</parent>
<groupId>ru.otus.spring</groupId>
<artifactId>docker-compose-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>docker-compose-example</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<scope>test</scope>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<scope>test</scope>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<finalName>docker-compose-example</finalName>
</build>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<finalName>docker-compose-example</finalName>
</build>
</project>
@@ -15,8 +15,8 @@ public class DockerComposeExampleApplication {
//Код для примера, делать так конечно нельзя :)
ApplicationContext context = SpringApplication.run(DockerComposeExampleApplication.class, args);
PersonRepository repository = context.getBean(PersonRepository.class);
repository.save(new Person(1, "Ivan", "Ivanov"));
System.out.println(repository.findById(1));
repository.save(new Person("Ivan", "Ivanov"));
System.out.println(repository.findAll());
}
}
@@ -5,6 +5,8 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Data
@@ -12,8 +14,15 @@ import javax.persistence.Id;
@AllArgsConstructor
@NoArgsConstructor
public class Person {
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Integer id;
private String name;
private String lastName;
public Person(String name, String lastName) {
this.name = name;
this.lastName = lastName;
}
}
@@ -0,0 +1,21 @@
package ru.otus.spring.docker.rest;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import ru.otus.spring.docker.model.Person;
import ru.otus.spring.docker.repository.PersonRepository;
import java.util.List;
@RestController
@RequiredArgsConstructor
public class PersonController {
private final PersonRepository repository;
@GetMapping("/api/persons")
public List<Person> getAllPersons() {
return this.repository.findAll();
}
}
@@ -1,8 +1,9 @@
spring:
datasource:
driver-class-name: ${DB_DRIVER}
url: ${DB_URL}
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
# Эти свойства будут перегружены свойствами в docker-compose.yml
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://localhost:5432/db
username: postgre
password: postgres
jpa:
generate-ddl: true
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Главная страницв</title>
</head>
<body>
<h1>Главная страница</h1>
<p>Список всех лиц доступен по <a href="api/persons" target="_blank">ссылке</a>.</p>
<p>Перезапустив приложение можно добавить ещё в БД.</p>
</body>
</html>