spring boot starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/your...
TRANSCRIPT
![Page 1: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/1.jpg)
Твой личный Spring Boot Starter
![Page 2: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/2.jpg)
@tolkv
2
2
![Page 3: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/3.jpg)
@aatarasoff
3
3
![Page 4: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/4.jpg)
Твой личный Spring Boot Starter
![Page 5: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/5.jpg)
План такой1. Будем решать задачу2. Будут сложности3. Будем бороться с ними4. Сделаем выводы5. Ответим на вопросы
5
![Page 6: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/6.jpg)
Простая задача.“Супергерой на час”
6
![Page 7: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/7.jpg)
Попытка №1
7
![Page 8: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/8.jpg)
8
К несчастью у нас целая куча сервисов
![Page 9: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/9.jpg)
Слайд Боли● Boilerplate-боль
○ бизнес-логика
○ куча непонятного, но нужного
● Конфигурация-боль
○ много настроек
○ сложная композировать настройки
● Имплементация-боль
○ не DRY
9
![Page 10: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/10.jpg)
К чему это ведёт?
● Низкая скорость создания
● Высокий порог вхождения
● Нужно держать в голове детали
10
![Page 11: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/11.jpg)
Spring Boot Starter
● Мини-фреймворк
● Высокий уровень абстракции
● Всё своё несёт собой
11
![Page 12: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/12.jpg)
Принципы
● композиция через аннотации
● согласованность технологий
● изменение поведения через конфигурацию
12
![Page 13: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/13.jpg)
Простой пример@SpringBootApplication
public class Application {
@PostConstruct
public void init(){
..boilerplate...
business logic
..boilerplate...
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
} 13
![Page 14: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/14.jpg)
Простой пример
@SpringBootApplication
@EnableThriftServer
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
14
![Page 15: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/15.jpg)
Добавим пару аннотаций
@EnableHystrix
@EnableHystrixDashboard
@SpringBootApplication
@EnableThriftServer
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
15
![Page 16: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/16.jpg)
Или не пару@EnableZuulProxy
@EnableDiscoveryClient
@EnableHystrix
@EnableHystrixDashboard
@SpringBootApplication
@EnableThriftServer
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}16
![Page 17: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/17.jpg)
Пишем свой...
стартер
17
![Page 18: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/18.jpg)
7 простых шагов
1. Напиши “простой” тест. Разберись в технологии.2. Напиши микросервис так, как если бы он был один3. Создай автоконфигуратор и переведи сервис на него4. Добавь точки расширения5. Не забудь про конфигурацию по-умолчанию6. Напиши тесты на автоконфигурацию7. Создай и распространяй стартер
18
![Page 19: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/19.jpg)
7 простых шагов
1. Напиши “простой” тест. Разберись в технологии.2. Напиши микросервис так, как если бы он был один3. Создай автоконфигуратор и переведи сервис на него4. Добавь точки расширения5. Не забудь про конфигурацию по-умолчанию6. Напиши тесты на автоконфигурацию7. Создай и распространяй стартер
19
![Page 20: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/20.jpg)
20
![Page 21: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/21.jpg)
21
Схема работы автоконфигуратора
![Page 22: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/22.jpg)
22
![Page 23: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/23.jpg)
23
![Page 24: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/24.jpg)
7 простых шагов
1. Напиши “простой” тест. Разберись в технологии.2. Напиши микросервис так, как если бы он был один3. Создай автоконфигуратор и переведи сервис на него4. Добавь точки расширения5. Не забудь про конфигурацию по-умолчанию6. Напиши тесты на автоконфигурацию7. Создай и распространяй стартер
24
![Page 25: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/25.jpg)
7 простых шагов
1. Напиши “простой” тест. Разберись в технологии.2. Напиши микросервис так, как если бы он был один3. Создай автоконфигуратор и переведи сервис на него4. Добавь точки расширения5. Не забудь про конфигурацию по-умолчанию6. Напиши тесты на автоконфигурацию7. Создай и распространяй стартер
25
![Page 26: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/26.jpg)
7 простых шагов
1. Напиши “простой” тест. Разберись в технологии.2. Напиши микросервис так, как если бы он был один3. Создай автоконфигуратор и переведи сервис на него4. Добавь точки расширения5. Не забудь про конфигурацию по-умолчанию6. Напиши тесты на автоконфигурацию7. Создай и распространяй стартер
26
![Page 27: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/27.jpg)
7 простых шагов
1. Напиши “простой” тест. Разберись в технологии.2. Напиши микросервис так, как если бы он был один3. Создай автоконфигуратор и переведи сервис на него4. Добавь точки расширения5. Не забудь про конфигурацию по-умолчанию6. Напиши тесты на автоконфигурацию7. Создай и распространяй стартер
27
![Page 28: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/28.jpg)
Зачем нужен spring.provides?
28
![Page 29: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/29.jpg)
Зачем нужен spring.provides?
29
![Page 30: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/30.jpg)
Что ещё нужно сделатьДобавим метрики, обработку ошибок и логирование:
proxyFactory.addAdvice(new MetricsThriftMethodInterceptor(gaugeService))
proxyFactory.addAdvice(new ExceptionsThriftMethodInterceptor())
proxyFactory.addAdvice(new LoggingThriftMethodInterceptor())
@Slf4j
public class LoggingThriftMethodInterceptor implements MethodBeforeAdvice, AfterReturningAdvice {
@Override
public void before(Method method, Object[] args, Object target) throws Throwable {
log.info("Thrift method {}.{}() is called with args: {}",
target.getClass().getSimpleName(), method.getName(), args
);
}
//afterReturning method is implemented here %)
}30
![Page 31: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/31.jpg)
Что ещё можно улучшить@ThriftClient(serviceId = "greeting-service", path = "/api")
TGreetingService.Client client;
greeting-service: #service name
endpoint: http://localhost:8080/api #direct endpoint
ribbon: #ribbon
listOfServers: localhost:8080 #hardcoded list
path: /service #general path
connectTimeout: 1000 #default=1000
readTimeout: 10000 #default=30000
31
![Page 32: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/32.jpg)
Как распространять?● Не прячьте свой труд. Используйте GitHub.
● Делитесь своими разработками со всеми. Используйте Bintray и jcenter.
32
![Page 33: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/33.jpg)
Парадокс (де)централизации микросервисов
Чтобы эффективно работать с распределенными приложениями, нужно иметь очень хорошие централизованные библиотеки/инструменты
Например: логирование, health-чеки, метрики, обработку программных ошибок
33
![Page 34: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/34.jpg)
Парадокс (де)централизации микросервисов
Чтобы эффективно работать с распределенными приложениями, нужно иметь очень хорошие централизованные библиотеки/инструменты
Но: не выносите бизнес-логику или доменные объекты
34
![Page 35: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/35.jpg)
7 простых шагов к счастью
1. Напиши “простой” тест. Разберись в технологии.2. Напиши микросервис так, как если бы он был один3. Создай автоконфигуратор и переведи сервис на него4. Добавь точки расширения5. Не забудь про конфигурацию по-умолчанию6. Напиши тесты на автоконфигурацию7. Создай и распространяй стартер
35
![Page 36: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/36.jpg)
7 простых шагов к счастью
1. Напиши “простой” тест. Разберись в технологии.2. Напиши микросервис так, как если бы он был один3. Создай автоконфигуратор и переведи сервис на него4. Добавь точки расширения5. Не забудь про конфигурацию по-умолчанию6. Напиши тесты на автоконфигурацию7. Создай и распространяй стартер
36
Зачем?
![Page 37: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/37.jpg)
СсылкиПолная версия: https://github.com/aatarasoff/spring-thrift-starter
Для grpc: https://github.com/lavcraft/grpc-spring-boot-starter
37
![Page 38: Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your own... · 2016. 7. 5. · Spring Boot Starter. @tolkv 2 2. @aatarasoff 3 3. Твой личный](https://reader035.vdocuments.mx/reader035/viewer/2022081323/603443eab241197b732898c1/html5/thumbnails/38.jpg)
Спасибо! Готовы ответить на ваши вопросы
@tolkv
@aatarasoff
38