14.62M
Категория: ПрограммированиеПрограммирование

Высокопроизводительные системы. Лекция 1

1.

Высокопроизводительные системы
Огурцов Андрей Юрьевич
Греков Марк Дмитриевич
2022 год

2.

3.

Что получим на выходе?

4.

Где взять JDK?

5.

JavaBean

6.

Bean scope

7.

Bean lifecycle

8.

Bean lifecycle

9.

Component Scan

10.

Component Scan

11.

Component vs Service vs Repository

12.

@Configuration

13.

Qualifier vs Primary

14.

Qualifier

15.

Conditional

16.

@Autowired

17.

Constructor injection

18.

Circular Reference

19.

International Students and Scholars Rock

20.

21.

Пример контроллера @PathVariable

22.

Пример контроллера @RequestBody
Плохой пример!!!
Не передавайте @Entity в @RequestBody
контроллера.
Вместо этого следует использовать DTO,
Который только косвенно связан с
данными. (об этом позже)

23.

Пример контроллера @RequestParam
В запросе @RequestParam c типом List<Long>
будут выглядеть, как ids[]=1,2,3,4,5
@RequestParam могут не передаваться в запросе.
В таком случае мы указываем required=false,
а в переменную будет помещено значение null,
если Spring не сможет найти ожидаемый параметр в запросе.

24.

Пример контроллера на скачивание файла

25.

Скачивание файлов при помощи контроллера
Для того чтобы вернуть файл из контроллера не
обязательно работать с HttpServletResponse напрямую.
Можно воспользоваться одним из следующих
возвращаемых типов:
• ResponseEntity<Resource> или
• ResponseEntity<InputStreamResource> или
• ResponseEntity<byte[]>

26.

Пример контроллера на загрузку файла
В дальнейшем из photo можно извлечь информацию при
помощи photo.getInputStream()

27.

НЕ ДЕЛАЙТЕ ТАК

28.

НЕ ДЕЛАЙТЕ ТАК

29.

НЕ ДЕЛАЙТЕ ТАК

30.

Используйте пагинацию на findAll

31.

Controller
Контроллер возвращает
путь к шаблону
Шаблон рендерится при помощи
Thymeleaf
Данные в шаблон попадают через
Model

32.

Valid
@Valid UserAccount userAccount;

33.

Validated
@Validated(BasicInfo.class) UserAccount userAccount;

34.

35.

Filter

36.

ExceptionHandler
Любой выкинутый за время работы приложения Exception будет
перехвачен ExceptionHandler и сформирует ответ, который
необходимо вернуть пользователю.

37.

Spring Data JPA

38.

Конфигурируем Datasource
Важно чтобы была зависимость spring-data и драйвера postgres
jwt.secret – собственная переменная, которая
была введена для валидации JWT

39.

@Entity

40.

@Entity

41.

@Entity

42.

@Entity

43.

@Entity

44.

N+1 проблема

45.

N+1 как должно быть

46.

N+1 проблема

47.

N+1 как должно быть

48.

N+1 как решить – BatchSize

49.

N+1 как решить – SUBSELECT

50.

N+1 как решить – JOIN

51.

FetchType

52.

53.

54.

Entity vs DTO

55.

Validation
@NotNull, @NotEmpty, @NotBlank, @Null
@Email
@Min, @Max, @Length
@Size
@Future, @Past
@Negative, @NegativeOrZero, @Positive, @PositiveOrZero
https://docs.jboss.org/hibernate/stable/validator/r
eference/en-US/html_single/#section-builtinconstraints

56.

JpaRepository

57.

JpaRepository
При помощи рефлексии `JpaRepository` может составлять
относительно простые запросы.
Стандартные методы:
• .save()
• .findById()
• .findAll()
• .delete()
• .deleteAll()
• .exists()

58.

JpaRepository
Более сложные запросы следует составлять при помощи @Query
@Query бывает native и по умолчанию.
native=true обозначает использовать голый
диалект SQL сервера.
Native по умолчанию использует диалект JPA

59.

JpaRepository
@Query можно совместить вместе с @Modifying

60.

@Transactional
@Transactional заставляет метод выполняться в
рамках одной транзакции. Брошенное
исключение откатит транзакцию.

61.

@Transactional
https://sysout.ru/transaction-propagation/

62.

@Transactional

63.

@Transactional

64.

@Transactional

65.

@Transactional

66.

@Transactional

67.

@Transactional

68.

@Transactional

69.

@Transactional

70.

@Propagation
Propagation отвечает на вопросы:
что если два метода аннотированы @Transactional,
и один вызывается из другого?
Будет ли создано две транзакции, или же одна?
Будет ли внутренний метод выбрасывать
исключение, если снаружи нет никакой
транзакции?

71.

@Isolation

72.

@Isolation

73.

@Isolation

74.

@Isolation

75.

Liquibase – sql файл

76.

Liquibase – changelog-v0_1_0.yaml

77.

Liquibase – changelog-v1_0_0.yaml

78.

Liquibase – db.changelog-master.yaml

79.

Liquibase – application.yaml

80.

Testcontainers

81.

Testcontainers – base test

82.

Testcontainers – junit-jupiter

83.

junit-Jupiter – нет миграций

84.

Postgres in docker

85.

Dockerfile

86.

Спасибо за внимание!
www.ifmo.ru
English     Русский Правила