diff --git a/2019-08/spring-27/pom.xml b/2019-08/spring-27/pom.xml
new file mode 100644
index 00000000..38000780
--- /dev/null
+++ b/2019-08/spring-27/pom.xml
@@ -0,0 +1,17 @@
+
+
+ 4.0.0
+
+ ru.otus
+ spring-27
+ 1.0
+
+ pom
+
+
+ spring-27-exercise
+ spring-27-solution
+
+
diff --git a/2019-08/spring-27/spring-27-exercise/pom.xml b/2019-08/spring-27/spring-27-exercise/pom.xml
new file mode 100644
index 00000000..e6323f5d
--- /dev/null
+++ b/2019-08/spring-27/spring-27-exercise/pom.xml
@@ -0,0 +1,57 @@
+
+
+ 4.0.0
+
+ ru.otus
+ spring-27-exercise
+ 1.0-SNAPSHOT
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.0.3.RELEASE
+
+
+
+ 2.8.0
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ org.springframework.boot
+ spring-boot-starter-data-rest
+
+
+ org.springframework.data
+ spring-data-rest-hal-browser
+ 3.1.0.RELEASE
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ com.h2database
+ h2
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
diff --git a/2019-08/spring-27/spring-27-exercise/src/main/java/ru/otus/spring/microservice/App.java b/2019-08/spring-27/spring-27-exercise/src/main/java/ru/otus/spring/microservice/App.java
new file mode 100644
index 00000000..22c21978
--- /dev/null
+++ b/2019-08/spring-27/spring-27-exercise/src/main/java/ru/otus/spring/microservice/App.java
@@ -0,0 +1,31 @@
+package ru.otus.spring.microservice;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.hateoas.config.EnableHypermediaSupport;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import ru.otus.spring.microservice.domain.Person;
+import ru.otus.spring.microservice.repostory.PersonRepository;
+
+import javax.annotation.PostConstruct;
+
+@SpringBootApplication
+@EnableWebMvc
+public class App {
+
+ @Autowired
+ private PersonRepository repository;
+
+ public static void main(String[] args) {
+ SpringApplication.run(App.class);
+ }
+
+ @PostConstruct
+ public void init() {
+ for(int i = 0 ; i < 1000; ++i) {
+ repository.save(new Person("Ivan"));
+ repository.save(new Person("Maria"));
+ }
+ }
+}
diff --git a/2019-08/spring-27/spring-27-exercise/src/main/java/ru/otus/spring/microservice/domain/Person.java b/2019-08/spring-27/spring-27-exercise/src/main/java/ru/otus/spring/microservice/domain/Person.java
new file mode 100644
index 00000000..e3d66986
--- /dev/null
+++ b/2019-08/spring-27/spring-27-exercise/src/main/java/ru/otus/spring/microservice/domain/Person.java
@@ -0,0 +1,37 @@
+package ru.otus.spring.microservice.domain;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity
+public class Person {
+
+ @Id
+ @GeneratedValue
+ private int id;
+ private String name;
+
+ public Person() {
+ }
+
+ public Person(String name) {
+ this.name = name;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/2019-08/spring-27/spring-27-exercise/src/main/java/ru/otus/spring/microservice/repostory/PersonRepository.java b/2019-08/spring-27/spring-27-exercise/src/main/java/ru/otus/spring/microservice/repostory/PersonRepository.java
new file mode 100644
index 00000000..73cce9b1
--- /dev/null
+++ b/2019-08/spring-27/spring-27-exercise/src/main/java/ru/otus/spring/microservice/repostory/PersonRepository.java
@@ -0,0 +1,19 @@
+package ru.otus.spring.microservice.repostory;
+
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.data.rest.core.annotation.RepositoryRestResource;
+import org.springframework.data.rest.core.annotation.RestResource;
+import ru.otus.spring.microservice.domain.Person;
+
+import java.util.List;
+
+@RepositoryRestResource(path = "person")
+public interface PersonRepository extends PagingAndSortingRepository {
+
+ List findAll();
+
+ @RestResource(path = "names")
+ List findByName(String name);
+}
diff --git a/2019-08/spring-27/spring-27-exercise/src/main/resources/application.yml b/2019-08/spring-27/spring-27-exercise/src/main/resources/application.yml
new file mode 100644
index 00000000..e69de29b
diff --git a/2019-08/spring-27/spring-27-solution/pom.xml b/2019-08/spring-27/spring-27-solution/pom.xml
new file mode 100644
index 00000000..fb3bf799
--- /dev/null
+++ b/2019-08/spring-27/spring-27-solution/pom.xml
@@ -0,0 +1,57 @@
+
+
+ 4.0.0
+
+ ru.otus
+ spring-27-solution
+ 1.0-SNAPSHOT
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.0.3.RELEASE
+
+
+
+ 2.8.0
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ org.springframework.boot
+ spring-boot-starter-data-rest
+
+
+ org.springframework.data
+ spring-data-rest-hal-browser
+ 3.1.0.RELEASE
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ com.h2database
+ h2
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
diff --git a/2019-08/spring-27/spring-27-solution/src/main/java/ru/otus/spring/microservice/App.java b/2019-08/spring-27/spring-27-solution/src/main/java/ru/otus/spring/microservice/App.java
new file mode 100644
index 00000000..22c21978
--- /dev/null
+++ b/2019-08/spring-27/spring-27-solution/src/main/java/ru/otus/spring/microservice/App.java
@@ -0,0 +1,31 @@
+package ru.otus.spring.microservice;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.hateoas.config.EnableHypermediaSupport;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import ru.otus.spring.microservice.domain.Person;
+import ru.otus.spring.microservice.repostory.PersonRepository;
+
+import javax.annotation.PostConstruct;
+
+@SpringBootApplication
+@EnableWebMvc
+public class App {
+
+ @Autowired
+ private PersonRepository repository;
+
+ public static void main(String[] args) {
+ SpringApplication.run(App.class);
+ }
+
+ @PostConstruct
+ public void init() {
+ for(int i = 0 ; i < 1000; ++i) {
+ repository.save(new Person("Ivan"));
+ repository.save(new Person("Maria"));
+ }
+ }
+}
diff --git a/2019-08/spring-27/spring-27-solution/src/main/java/ru/otus/spring/microservice/actuators/MyHealthIndicator.java b/2019-08/spring-27/spring-27-solution/src/main/java/ru/otus/spring/microservice/actuators/MyHealthIndicator.java
new file mode 100644
index 00000000..024e1357
--- /dev/null
+++ b/2019-08/spring-27/spring-27-solution/src/main/java/ru/otus/spring/microservice/actuators/MyHealthIndicator.java
@@ -0,0 +1,27 @@
+package ru.otus.spring.microservice.actuators;
+
+import org.springframework.boot.actuate.health.Health;
+import org.springframework.boot.actuate.health.HealthIndicator;
+import org.springframework.boot.actuate.health.Status;
+import org.springframework.stereotype.Component;
+
+import java.util.Random;
+
+@Component
+public class MyHealthIndicator implements HealthIndicator {
+
+ private final Random random = new Random();
+
+ @Override
+ public Health health() {
+ boolean serverIsDown = random.nextBoolean();
+ if (serverIsDown) {
+ return Health.down()
+ .status(Status.DOWN)
+ .withDetail("message", "Караул!")
+ .build();
+ } else {
+ return Health.up().withDetail("message", "Ура, товарищи!").build();
+ }
+ }
+}
diff --git a/2019-08/spring-27/spring-27-solution/src/main/java/ru/otus/spring/microservice/domain/Person.java b/2019-08/spring-27/spring-27-solution/src/main/java/ru/otus/spring/microservice/domain/Person.java
new file mode 100644
index 00000000..e3d66986
--- /dev/null
+++ b/2019-08/spring-27/spring-27-solution/src/main/java/ru/otus/spring/microservice/domain/Person.java
@@ -0,0 +1,37 @@
+package ru.otus.spring.microservice.domain;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity
+public class Person {
+
+ @Id
+ @GeneratedValue
+ private int id;
+ private String name;
+
+ public Person() {
+ }
+
+ public Person(String name) {
+ this.name = name;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/2019-08/spring-27/spring-27-solution/src/main/java/ru/otus/spring/microservice/repostory/PersonRepository.java b/2019-08/spring-27/spring-27-solution/src/main/java/ru/otus/spring/microservice/repostory/PersonRepository.java
new file mode 100644
index 00000000..d4fae7cb
--- /dev/null
+++ b/2019-08/spring-27/spring-27-solution/src/main/java/ru/otus/spring/microservice/repostory/PersonRepository.java
@@ -0,0 +1,19 @@
+package ru.otus.spring.microservice.repostory;
+
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.data.rest.core.annotation.RepositoryRestResource;
+import org.springframework.data.rest.core.annotation.RestResource;
+import ru.otus.spring.microservice.domain.Person;
+
+import java.util.List;
+
+@RepositoryRestResource(path = "person")
+public interface PersonRepository extends PagingAndSortingRepository {
+
+ List findAll();
+
+ @RestResource(path = "names", rel = "names")
+ List findByName(String name);
+}
diff --git a/2019-08/spring-27/spring-27-solution/src/main/resources/application.yml b/2019-08/spring-27/spring-27-solution/src/main/resources/application.yml
new file mode 100644
index 00000000..15c55e52
--- /dev/null
+++ b/2019-08/spring-27/spring-27-solution/src/main/resources/application.yml
@@ -0,0 +1,11 @@
+management:
+ endpoints:
+ web:
+ exposure:
+ include: "*"
+ endpoint:
+ health:
+ show-details: always
+ health:
+ defaults:
+ enabled: true