В предыдущем блоге мы установили реактивное приложение с микрометром на основе InfluxDB.
В этом уроке мы будем использовать наш старый школьный блокирующий Spring Stack на основе сервлетов с JDBC. Моя база данных будет postgresql. Я буду использовать те же сценарии из предыдущего сообщения в блоге.
Таким образом, у нас будет скрипт, который инициализирует базу данных
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#!/bin/bash set -e psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL create schema spring_data_jpa_example; create table spring_data_jpa_example.employee( id SERIAL PRIMARY KEY , firstname TEXT NOT NULL , lastname TEXT NOT NULL , email TEXT not null , age INT NOT NULL , salary real , unique (email) ); insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) EOSQL |
У нас будет файл для создания докера, который содержит InfluxDB, Postgres и Grafana.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
version: '3.5' services: influxdb: image: influxdb restart: always ports: - 8086 : 8086 grafana: image: grafana / grafana restart: always ports: - 3000 : 3000 postgres: image: postgres restart: always environment: POSTGRES_USER: db - user POSTGRES_PASSWORD: your - password POSTGRES_DB: postgres ports: - 5432 : 5432 volumes: - $PWD / init - db - script.sh: / docker - entrypoint - initdb.d / init - db - script.sh |
Теперь пришло время создать наше весеннее приложение, начиная с наших зависимостей maven.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
<? 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 http://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.2.4.RELEASE</ version > </ parent > < groupId >com.gkatzioura</ groupId > < artifactId >EmployeeApi</ artifactId > < version >1.0-SNAPSHOT</ version > < build > < defaultGoal >spring-boot:run</ defaultGoal > < plugins > < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-compiler-plugin</ artifactId > < configuration > < source >8</ source > < target >8</ target > </ configuration > </ plugin > < plugin > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-maven-plugin</ artifactId > </ plugin > </ plugins > </ build > < 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.springframework.boot</ groupId > < artifactId >spring-boot-starter-actuator</ artifactId > </ dependency > < dependency > < groupId >org.postgresql</ groupId > < artifactId >postgresql</ artifactId > < version >42.2.8</ version > </ dependency > < dependency > < groupId >io.micrometer</ groupId > < artifactId >micrometer-core</ artifactId > < version >1.3.2</ version > </ dependency > < dependency > < groupId >io.micrometer</ groupId > < artifactId >micrometer-registry-influx</ artifactId > < version >1.3.2</ version > </ dependency > < dependency > < groupId >org.projectlombok</ groupId > < artifactId >lombok</ artifactId > < version >1.18.12</ version > < scope >provided</ scope > </ dependency > </ dependencies > </ project > |
Поскольку это зависимость, поддерживаемая JDBC, мы создадим сущности и репозитории.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package com.gkatzioura.employee.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import lombok.Data; @Data @Entity @Table (name = "employee" , schema= "spring_data_jpa_example" ) public class Employee { @Id @Column (name = "id" ) @GeneratedValue (strategy = GenerationType.IDENTITY) private Long id; @Column (name = "firstname" ) private String firstName; @Column (name = "lastname" ) private String lastname; @Column (name = "email" ) private String email; @Column (name = "age" ) private Integer age; @Column (name = "salary" ) private Integer salary; } |
Тогда давайте добавим репозиторий
1
2
3
4
5
6
7
|
package com.gkatzioura.employee.repository; import com.gkatzioura.employee.model.Employee; import org.springframework.data.jpa.repository.JpaRepository; public interface EmployeeRepository extends JpaRepository<Employee,Long> { } |
И контроллер
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package com.gkatzioura.employee.controller; import java.util.List; import com.gkatzioura.employee.model.Employee; import com.gkatzioura.employee.repository.EmployeeRepository; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class EmployeeController { private final EmployeeRepository employeeRepository; public EmployeeController(EmployeeRepository employeeRepository) { this .employeeRepository = employeeRepository; } @RequestMapping ( "/employee" ) public List<Employee> getEmployees() { return employeeRepository.findAll(); } } |
Последний, но не менее важный класс Application
01
02
03
04
05
06
07
08
09
10
11
12
13
|
package com.gkatzioura.employee; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application. class , args); } } |
А также конфигурация
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
spring: datasource: platform: postgres driverClassName: org.postgresql.Driver username: db - user password: your - password url: jdbc:postgresql: / / 127.0 . 0.1 : 5432 / postgres management: metrics: export: influx: enabled: true db: employeeapi uri: http: / / 127.0 . 0.1 : 8086 endpoints: web: expose: "*" |
Давай попробуем
1
|
curl http: //localhost :8080 /employee |
После некоторых запросов мы можем найти записи сохранились.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
docker exec -it influxdb- local influx > SHOW DATABASES; name: databases name ---- _internal employeeapi > use employeeapi Using database employeeapi > SHOW MEASUREMENTS name: measurements name ---- hikaricp_connections hikaricp_connections_acquire hikaricp_connections_active hikaricp_connections_creation hikaricp_connections_idle hikaricp_connections_max hikaricp_connections_min hikaricp_connections_pending hikaricp_connections_timeout hikaricp_connections_usage http_server_requests jdbc_connections_active jdbc_connections_idle jdbc_connections_max jdbc_connections_min jvm_buffer_count jvm_buffer_memory_used jvm_buffer_total_capacity jvm_classes_loaded jvm_classes_unloaded jvm_gc_live_data_size jvm_gc_max_data_size jvm_gc_memory_allocated jvm_gc_memory_promoted jvm_gc_pause jvm_memory_committed jvm_memory_max jvm_memory_used jvm_threads_daemon jvm_threads_live jvm_threads_peak jvm_threads_states logback_events process_cpu_usage process_files_max process_files_open process_start_time process_uptime system_cpu_count system_cpu_usage system_load_average_1m tomcat_sessions_active_current tomcat_sessions_active_max tomcat_sessions_alive_max tomcat_sessions_created tomcat_sessions_expired tomcat_sessions_rejected |
Как видите, метрики немного отличаются от предыдущего примера. У нас есть метрики соединения jdbc метрики Tomcat и все метрики, относящиеся к нашему приложению. Вы можете найти исходный код на github .
Опубликовано на Java Code Geeks с разрешения Эммануила Гкациоураса, партнера нашей программы JCG. См. Оригинальную статью здесь: Spring Boot и Micrometer с InlfuxDB. Часть 3. Сервлеты и JDBC. Мнения, высказанные участниками Java Code Geeks, являются их собственными. |