+ All Categories
Home > Documents > Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your...

Spring Boot Starter Твой личныйpublic.jugru.org/jpoint/2016/msk/day_1/track_4/Your...

Date post: 07-Oct-2020
Category:
Upload: others
View: 6 times
Download: 0 times
Share this document with a friend
38
Твой личный Spring Boot Starter
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. Твой личный

Твой личный 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. Твой личный

@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. Твой личный

@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. Твой личный

Твой личный 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. Твой личный

План такой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. Твой личный

Простая задача.“Супергерой на час”

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. Твой личный

Попытка №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. Твой личный

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. Твой личный

Слайд Боли● 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. Твой личный

К чему это ведёт?

● Низкая скорость создания

● Высокий порог вхождения

● Нужно держать в голове детали

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. Твой личный

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. Твой личный

Принципы

● композиция через аннотации

● согласованность технологий

● изменение поведения через конфигурацию

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. Твой личный

Простой пример@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. Твой личный

Простой пример

@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. Твой личный

Добавим пару аннотаций

@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. Твой личный

Или не пару@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. Твой личный

Пишем свой...

стартер

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. Твой личный

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. Твой личный

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. Твой личный

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. Твой личный

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. Твой личный

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. Твой личный

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. Твой личный

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. Твой личный

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. Твой личный

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. Твой личный

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. Твой личный

Зачем нужен 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. Твой личный

Зачем нужен 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. Твой личный

Что ещё нужно сделатьДобавим метрики, обработку ошибок и логирование:

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. Твой личный

Что ещё можно улучшить@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. Твой личный

Как распространять?● Не прячьте свой труд. Используйте 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. Твой личный

Парадокс (де)централизации микросервисов

Чтобы эффективно работать с распределенными приложениями, нужно иметь очень хорошие централизованные библиотеки/инструменты

Например: логирование, 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. Твой личный

Парадокс (де)централизации микросервисов

Чтобы эффективно работать с распределенными приложениями, нужно иметь очень хорошие централизованные библиотеки/инструменты

Но: не выносите бизнес-логику или доменные объекты

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. Твой личный

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. Твой личный

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://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. Твой личный

Спасибо! Готовы ответить на ваши вопросы

@tolkv

@aatarasoff

38


Recommended