具有InlfuxDB的Spring Boot和Micrometer第3部分:Servlet和JDBC

在上一个博客中,我们使用由InfluxDB支持的千分尺设置了反应式应用程序。

在本教程中,我们将使用传统的带JDBC阻塞式Servlet的Spring Stack。 我选择的数据库是postgresql。 我将使用与先前博客文章相同的脚本。

因此,我们将拥有初始化数据库的脚本

 #!/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) values ( 'John' , 'Doe 1' , 'john1@doe.com' ,18,1234.23); insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) values ( 'John' , 'Doe 2' , 'john2@doe.com' ,19,2234.23); insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) values ( 'John' , 'Doe 3' , 'john3@doe.com' ,20,3234.23); insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) values ( 'John' , 'Doe 4' , 'john4@doe.com' ,21,4234.23); insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) values ( 'John' , 'Doe 5' , 'john5@doe.com' ,22,5234.23);  EOSQL 

我们将拥有一个包含InfluxDB,Postgres和Grafana的docker compose文件。

 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依赖关系开始构建我们的spring应用程序了。

 <? 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支持的依赖关系,因此我们将创建实体和存储库。

 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;  } 

然后让我们添加存储库

 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> {  } 

和控制器

 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类

 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); }  } 

以及配置

 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: "*" 

试试看

 curl http: //localhost :8080 /employee 

经过一些请求后,我们可以找到保留的条目。

 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上找到源代码。

翻译自: https://www.javacodegeeks.com/2020/03/spring-boot-and-micrometer-with-inlfuxdb-part-3-servlets-and-jdbc.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jsf xhtml调用方法_JSF的工作方式以及调试方法–可以使用polyglot吗?

jsf xhtml调用方法JSF不是我们通常认为的那样。 这也是一个调试起来可能有些棘手的框架&#xff0c;尤其是在初次遇到时。 在这篇文章中&#xff0c;让我们继续探讨为什么会出现这种情况&#xff0c;并提供一些JSF调试技术。 我们将讨论以下主题&#xff1a; JSF不是我们经常想…

将Auth0 OIDC(OAUTH 2)与授权(组和角色)集成

如果您正在使用Auth0对多个现有应用程序中的用户进行身份验证和授权&#xff0c;则可能需要将下一个Web应用程序与Auth0集成。 有多种方法可以执行此操作&#xff0c;例如&#xff0c;如果要将Jenkins与Auth0集成&#xff0c;则可以使用SAML v2&#xff1b;否则&#xff0c;可…

tomee_一罐将其全部统治:Apache TomEE + Shrinkwrap == JavaEE引导

tomee警告&#xff1a;我不是Spring Boot的专家。 我发现很多事情对此非常有趣&#xff0c;并且当然可以真正改善您的日常工作。 而且&#xff0c;我对Spring Boot没有任何反对&#xff0c;也没有开发或使用它的人。 但是我认为社区高估了该产品。 一年前&#xff0c;我开始收…

使用Spring Boot和Project Reactor处理SQS消息

我最近参与了一个项目&#xff0c;在该项目中&#xff0c;我不得不有效地处理通过AWS SQS Queue流入的大量消息。 在这篇文章&#xff08;可能还有一篇&#xff09;中&#xff0c;我将介绍使用出色的Project Reactor处理消息的方法。 以下是我要进行的设置&#xff1a; 设置本…

初级测试开发面试题_初级开发人员在编写单元测试时常犯的错误

初级测试开发面试题自从我编写第一个单元测试以来已经有10年了。 从那时起&#xff0c;我不记得我已经编写了成千上万的单元测试。 老实说&#xff0c;我在源代码和测试代码之间没有任何区别。 对我来说是同一回事。 测试代码是源代码的一部分。 在过去的3-4年中&#xff0c;我…

使用SoapUI调用安全WCF SOAP服务–第1部分,该服务

在这个由三部分组成的传奇中&#xff0c;我将演示如何使用SoapUI API工具来调用安全的SOAP服务。 首先&#xff0c;我将专注于创建服务&#xff0c;在接下来的文章中它将充当被测系统。 使用基本身份验证传输安全性机制维护对该服务中资源的访问。 Windows Communication Foun…

java简单系统_Java简单学生管理系统

Java简单学生管理系统这个不需要手动输入&#xff0c;笔记记录//studentpublic class student(){private String id;//学号private String name;//姓名private int age;//年龄public String getId() {return id;}public void setId(String id) {this.id id;}public String get…

kafka java编程demo_Kafka简单客户端编程实例

今天&#xff0c;我们给大家带来一篇如何利用Kafka的API进行客户端编程的文章&#xff0c;这篇文章很简单&#xff0c;就是利用Kafka的API创建一个生产者和消费者&#xff0c;生产者不断向Kafka写入消息&#xff0c;消费者则不断消费Kafka的消息。下面是具体的实例代码。一、创…

java我的世界极限生存_我的世界 1.7.10 极限生存整合包

整合包介绍&#xff1a;最近总有人觉得Minecraft很无聊&#xff0c;没有什么可玩的&#xff0c;或者觉得生存太简单 那么就来试试这个吧&#xff0c;全部是增强怪物的MOD&#xff0c;保证不无聊&#xff0c;保证不简单 基本上没有增加一些新的东西&#xff0c;只增加了几种怪物…

具有InlfuxDB的Spring Boot和Micrometer第1部分:基础项目

对于那些关注此博客的人来说&#xff0c;难怪我倾向于大量使用InfluxDB。 我喜欢这样一个事实&#xff0c;它是一个真正的单一用途的数据库&#xff08;时间序列&#xff09;&#xff0c;具有许多功能&#xff0c;并且还带有企业支持。 Spring也是我选择的工具之一。 因此&…

PIT,JUnit 5和Gradle –仅需额外的一行配置

在Gradle&#xff08;带有gradle-pitest-plugin 1.4.7&#xff09;中发现简单&#xff0c;经过改进的PIT和JUnit 5配置。 不可否认&#xff0c;如今JUnit 5越来越受欢迎。 虽然为JUnit 5提供了一个专用于PIT的插件&#xff0c;并且gradle-pitest-plugin支持了很多年&#xff0…

apache camel_使用WildFly 8在Java EE7中自举Apache Camel

apache camel从Camel版本2.10开始&#xff0c;支持CDI&#xff08;JSR-299&#xff09;和DI&#xff08;JSR-330&#xff09;。 这为在Java EE容器中以及在独立的Java SE或CDI容器中开发和部署Apache Camel项目提供了新的机会。 是时候尝试一下并熟悉它了。 骆驼到底是什么&am…

Hibernate中保存与持久性以及saveOrUpdate之间的区别

保存与保存或更新与持久保存在Hibernate中 save和saveOrUpdate之间的区别是什么或save和persist之间的区别是任何Hibernate面试中常见的面试问题&#xff0c;就像Hibernate中get和load方法之间的区别一样。 Hibernate Session类提供了几种方法&#xff0c;可以通过诸如save&am…

java中的语句有哪些_java中的循环语句有哪些

Java中有三种主要的循环结构&#xff1a;while 循环do…while 循环for 循环顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,&#xff0c;就需要使用循环结构。一、while循环语法&#xff1a;while( 布尔表达式 ) {     //循环内容   }只要符合布尔表达…

php无法新数据类型,新手入门PHP必知的七种数据类型

想要入门PHP&#xff0c;首先要学会搭建环境&#xff0c;其次是学习基础语法。PHP的基础包括数据类型&#xff0c;运算符&#xff0c;变量和常量等。在这篇文章中&#xff0c;我们主要了解什么是数据类型。数据类型是指同种数据的一个统称&#xff0c;一般会描述为XX数据类型。…

攻防世界web高手进阶php_rce,php_rce 攻防世界xctf web

php_rce首先了解ThinkPHP5.x rec 漏洞分析与复现https://blog.csdn.net/qq_40884727/article/details/101452478var_pathinfo的默认配置为s,我们可以通过$_GET[‘s’]来传参于是构造payloadhttp://111.198.29.45:30600/index.php?sindex/\think\App/invokefunction&functi…

具有InlfuxDB的Spring Boot和Micrometer第2部分:添加InfluxDB

自从我们添加了基本应用程序以来&#xff0c;是时候启动InfluxDB实例了。 我们将按照之前的教程进行操作&#xff0c;并添加一个docker实例。 docker run –rm -p 8086&#xff1a;8086 –name influxdb-本地influxdb 是时候在我们的pom上添加微米InfluxDB依赖项了 < dep…

使用比较器的nulls对具有null值的列表进行排序

你好朋友&#xff0c; 在本教程中&#xff0c;我们将看到如何使用Java 8 Comparator.nullsFirst在列表中的项目很少为空时如何对项目列表进行排序&#xff0c;以便将null视为列表中的最小元素。 –什么是比较器 – nullsFirst方法在Comparator中做什么 –排序具有非空名称的…

Jar Hell变得轻松–用jHades揭开类路径的神秘面纱

Java开发人员将不得不面对的最困难的问题是类路径错误&#xff1a; ClassNotFoundException &#xff0c; NoClassDefFoundError &#xff0c;Jar Hell&#xff0c; Xerces Hell和公司。 在本文中&#xff0c;我们将探究这些问题的根本原因&#xff0c;并了解最小的工具&#…

分度器中硒定位器的完整指南(示例)

在测试网站的功能时&#xff0c;特别是Web元素&#xff08;例如单选按钮&#xff0c;文本框&#xff0c;下拉列表等&#xff09;&#xff0c;您需要确保能够访问这些元素。 Selenium定位器正是出于这个目的&#xff0c;通过使用此命令&#xff0c;我们可以识别这些Web元素DOM&a…