So schließen Sie den Aktuator in SpringBoot
SpringBoot schließt den Aktuator. Es bietet viele produktionstaugliche Funktionen, wie z. B. die Überwachung und Messung von Spring Boot-Anwendungen. Diese Funktionen von Actuator sind über zahlreiche REST-Endpunkte, Remote-Shells und JMX verfügbar.
【Nutzungsumgebung】
management: endpoint: health: show-details: ALWAYS endpoints: enabled-by-default: false #关闭监控 web: exposure: include: '*'
können andere Endpunkte auf folgende Weise öffnen. Wenn Sie einige Endpunkte schließen müssen, können Sie sie ausschließen.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
Starten Sie das Projekt neu und Sie können sehen, dass die angezeigten Endpunkte stark zugenommen haben
Aktuator-Endpunktorganisation
/autoconfig und /conditions, um automatische Konfigurationsbedingungen zu erhalten[Beispiel]
Das Obige ist ein Beispiel für eine fehlgeschlagene Bedingung, wie im Bild gezeigt, ist JdbcTemplate, diese Klasse kann helfen Wir betreiben die Datenbank. Da die relevanten abhängigen Klassen nicht eingeführt wurden, lautet die Meldung:
„message“: „@ConditionalOnClass hat die erforderliche Klasse ‘org.springframework.jdbc.core.JdbcTemplate“ nicht gefunden
Überprüfen Sie den Klassenpfad und Es besteht keine Anforderung. Wenn die JdbcTemplate-Bedingung nicht erfüllt ist, wird keine automatische Konfiguration durchgeführt. Es gibt ein JSON-Dokument zurück, das jede Bean im Kontext beschreibt, einschließlich ihres Java-Typs und anderer injizierter Beans.
/env endpoint generiert eine Liste aller für die Anwendung verfügbaren Umgebungseigenschaften, unabhängig davon, ob sie verwendet werden oder nicht. Dazu gehören Umgebungsvariablen, JVM-Eigenschaften, Befehlszeilenparameter und Eigenschaften, die von application.properties- oder application.yml-Dateien bereitgestellt werden.
Endpoint:/actuator/env
/env bietet einige Sicherheitsrichtlinien zum Schutz der Vertraulichkeit der Konfiguration. Um zu verhindern, dass solche Informationen in /env offengelegt werden, werden alle Attribute mit den Namen „Passwort“, „Geheimnis“ und „Schlüssel“ (oder der letzte Absatz des Namens) in /env mit „*“ hinzugefügt. Die Referenz lautet wie folgt:
Die URL-Zuordnung der /mapping-Anfrage
/mapping-Endpunkt zeigt alle @RequestMapping-Anfragepfade anDer Wert von Jede Zuordnung hat zwei Attribute: Bean und Methode. Das Bean-Attribut identifiziert den Namen der Spring
/metrics Laufzeitindikatorüberwachung
/metrics bietet uns eine Überwachung von Laufzeitmetriken, mit denen wir die Anwendung zur Laufzeit schnell überprüfen können. Endpunkt: /actuator/metrics
Die wichtigsten Überwachungselemente sind wie folgt:/metrics端点会返回所有的可用度量值,但你也可能只对某个值感兴趣。要获取单个值,请求时可以在URL后加上对应的键名。
如上图所示,查询jvm最大内存,结果值大约为6G。
/httptrace 追踪Web请求
/httptrace端点能报告所有Web请求的详细信息,包括请求方法、路径、时间戳以及请求和响应的头信息。
【请求端点】/actuator/httptrace
默认情况下httptrace没有启用,它要求一个HttpTraceRepository 的对象Bean.
在系统中创建如下配置,提供一个HttpTraceRepository 类型的Bean,这里选择的是InMemoryHttpTraceRepository内存存储的方式。该方式默认提供最新的100条请求记录。
import org.springframework.boot.actuate.trace.http.HttpTraceRepository; import org.springframework.boot.actuate.trace.http.InMemoryHttpTraceRepository; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class HttpTraceActuatorConfiguration { @Bean public HttpTraceRepository httpTraceRepository() { return new InMemoryHttpTraceRepository(); } }
/dump 导出线程快照
/dump端点会生成当前线程活动的快照。完整的线程导出报告里会包含应用程序的每个线程。其中包含很多线程的特定信息,还有线程相关的阻塞和锁状态。
【请求端点】/threaddump
【测试】
Thread thread = new Thread(() -> { try { Thread.sleep(1000000); } catch (InterruptedException e) { e.printStackTrace(); } }, "测试线程"); thread.start();
/shutdown 优雅的关闭应用程序
/shutdown可以让应用服务优雅的关闭,默认是关闭的。假设你要关闭运行中的应用程序。比方说,在微服务架构中,你有多个微服务应用的实例运行在云上,其中某个实例有问题了,你决定关闭该实例并重启这个有问题的应用程序。在这个场景中,Actuator的/shutdown端点就很有用了。
优雅的关闭和kill -9的方式是相对的,它不会粗暴的立马关闭应用,而是会释放相关链接以及执行SpringBoot容器停止后的一些操作,然后再关闭应用。
【端点】/actuator/shutdown 要求POST请求方式
【示例】
在应用中添加一个关闭前处理的钩子方法
Runtime.getRuntime().addShutdownHook(new Thread(() -> { System.out.println("关闭应用,释放资源"); }));
可以看到通过/actuator/shutdown关闭应用可以触发这些关闭处理的钩子函数,方便我们在应用停止时关闭一些连接以及做一些其他的处理。
整理
【1】上面实践了一些Actuator端点示例,虽然Actuator提供的功能很强大,但是在如今的集群化,K8S容器化应用部署下,这些直接访问某些应用的情况就变得很少了,比如监控Zipkin 、Spring Cloud Sleuth等等,内存监控这一块K8S容器化平台也有很多。但是,去学习实践这样的一个工具也是很值得的,如果后面有类似监控、关闭应用、获取请求URL映射、获取配置等等,那么我们就可以去看看Actuator是如何做的,学习和扩展。
【2】本次的学习时看的《SpringBoot实战》书籍的学习笔记,该书Actuator章节后在后面也提及了很多进阶的知识,因为具体应用场景不多,下面就简单的整理下,把一些知识点记录下来,如果后面需要在重点实践学习下。
【3】《SpringBoot实战》书籍关于Actuator介绍的一些使用可能在当下的版本中有些出入,这里贴上官方文档地址,参考对比下https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.enabling
【4】Actuator通过REST端点提供了不少非常有用的信息。另一个深入运行中应用程序内部的方式是使用远程shell。Spring Boot集成了CRaSH,一种能嵌入任意Java应用程序的shell。Spring Boot还扩展了CRaSH,添加了不少Spring Boot特有的命令,提供了与Actuator端点类似的功能。该工具附上应用上,会在启动时提供一个访问秘钥,我们通过ssh user@localhost -p 2000 的方式就可以去访问,并且执行一些命令去查看应用数据。
【5】除了REST端点和远程shell,Actuator还把它的端点以MBean的方式发布了出来,可以通过JMX来查看和管理。使用JMX是管理Spring Boot应用程序的一个好方法,如果你已在用JMX管理应用程序中的其他MBean,则尤其如此。
[6] Zuvor haben wir einige der integrierten Endpunkte von Actuator verwendet. Wir können Actuator auch entsprechend unseren eigenen Anforderungen erweitern und anpassen.
Tatsächlich bietet Actuator viele Möglichkeiten, es anzupassen, einschließlich der folgenden fünf.
1: Benennen Sie den Endpunkt um. Ändern Sie den Standardendpunkt in unsere benutzerdefinierte Endpunktadresse.
2: Endpunkte aktivieren und deaktivieren.
3: Benutzerdefinierte metrische Informationen.
4: Erstellen Sie ein benutzerdefiniertes Lager zum Speichern von Tracking-Daten.
5: Fügen Sie einen benutzerdefinierten Gesundheitsindikator ein.
【7】Hier können wir sehen, dass wir durch Actuator viele Informationen über das System sehen können, was für Entwickler großartig ist, aber im Hinblick auf die Sicherheit Wenn es nicht eingeschränkt wird, wird die Sicherheit des Systems stark beeinträchtigt. Der Endpunktschutz von Actuator kann auf die gleiche Weise wie andere URL-Pfade verwendet werden – mit Spring Security. In einer Spring Boot-Anwendung bedeutet dies, dass die Security-Starter-Abhängigkeit als Build-Abhängigkeit hinzugefügt wird und dann die Anwendung, einschließlich des Actuator-Endpunkts, durch eine sicherheitsbezogene automatische Konfiguration geschützt wird. Sie möchten beispielsweise den Endpunkt /shutdown schützen und den Zugriff nur Benutzern mit ADMIN-Berechtigungen ermöglichen.
Das obige ist der detaillierte Inhalt vonSo schließen Sie den Aktuator in SpringBoot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Einführung in Jasypt Jasypt ist eine Java-Bibliothek, die es einem Entwickler ermöglicht, seinem Projekt mit minimalem Aufwand grundlegende Verschlüsselungsfunktionen hinzuzufügen und kein tiefes Verständnis der Funktionsweise der Verschlüsselung erfordert. standardbasierte Verschlüsselungstechnologie. Passwörter, Text, Zahlen, Binärdateien verschlüsseln ... Geeignet für die Integration in Spring-basierte Anwendungen, offene API, zur Verwendung mit jedem JCE-Anbieter ... Fügen Sie die folgende Abhängigkeit hinzu: com.github.ulisesbocchiojasypt-spring-boot-starter2 Die Vorteile von Jasypt schützen unsere Systemsicherheit. Selbst wenn der Code durchgesickert ist, kann die Datenquelle garantiert werden.

Nutzungsszenario 1. Die Bestellung wurde erfolgreich aufgegeben, die Zahlung erfolgte jedoch nicht innerhalb von 30 Minuten. Die Zahlung ist abgelaufen und die Bestellung wurde automatisch storniert. 2. Die Bestellung wurde unterzeichnet und es wurde 7 Tage lang keine Bewertung durchgeführt. Wenn die Bestellung abläuft und nicht ausgewertet wird, wird die Bestellung standardmäßig positiv bewertet. Wenn der Händler die Bestellung innerhalb von 5 Minuten nicht erhält, wird die Bestellung abgebrochen Es wird eine SMS-Erinnerung gesendet ... Für Szenarien mit langen Verzögerungen und geringer Echtzeitleistung können wir die Aufgabenplanung verwenden, um eine regelmäßige Abfrageverarbeitung durchzuführen. Zum Beispiel: xxl-job Heute werden wir auswählen

1. Redis implementiert das Prinzip der verteilten Sperren und warum verteilte Sperren erforderlich sind. Bevor über verteilte Sperren gesprochen wird, muss erläutert werden, warum verteilte Sperren erforderlich sind. Das Gegenteil von verteilten Sperren sind eigenständige Sperren. Wenn wir Multithread-Programme schreiben, vermeiden wir Datenprobleme, die durch den gleichzeitigen Betrieb einer gemeinsam genutzten Variablen verursacht werden. Normalerweise verwenden wir eine Sperre, um die Richtigkeit der gemeinsam genutzten Variablen sicherzustellen Die gemeinsam genutzten Variablen liegen im gleichen Prozess. Wenn es mehrere Prozesse gibt, die gleichzeitig eine gemeinsam genutzte Ressource betreiben müssen, wie können sie sich dann gegenseitig ausschließen? Heutige Geschäftsanwendungen sind in der Regel Microservice-Architekturen, was auch bedeutet, dass eine Anwendung mehrere Prozesse bereitstellen muss. Wenn mehrere Prozesse dieselbe Datensatzzeile in MySQL ändern müssen, ist eine Verteilung erforderlich, um fehlerhafte Daten zu vermeiden wird zu diesem Zeitpunkt eingeführt. Der Stil ist gesperrt. Punkte erreichen wollen

Springboot liest die Datei, kann aber nach dem Packen in ein JAR-Paket nicht auf die neueste Entwicklung zugreifen. Es gibt eine Situation, in der Springboot die Datei nach dem Packen in ein JAR-Paket nicht lesen kann ist ungültig und kann nur über den Stream gelesen werden. Die Datei befindet sich unter resources publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input

SpringBoot und SpringMVC sind beide häufig verwendete Frameworks in der Java-Entwicklung, es gibt jedoch einige offensichtliche Unterschiede zwischen ihnen. In diesem Artikel werden die Funktionen und Verwendungsmöglichkeiten dieser beiden Frameworks untersucht und ihre Unterschiede verglichen. Lassen Sie uns zunächst etwas über SpringBoot lernen. SpringBoot wurde vom Pivotal-Team entwickelt, um die Erstellung und Bereitstellung von Anwendungen auf Basis des Spring-Frameworks zu vereinfachen. Es bietet eine schnelle und einfache Möglichkeit, eigenständige, ausführbare Dateien zu erstellen

Wenn Springboot + Mybatis-plus keine SQL-Anweisungen zum Hinzufügen mehrerer Tabellen verwendet, werden die Probleme, auf die ich gestoßen bin, durch die Simulation des Denkens in der Testumgebung zerlegt: Erstellen Sie ein BrandDTO-Objekt mit Parametern, um die Übergabe von Parametern an den Hintergrund zu simulieren dass es äußerst schwierig ist, Multi-Table-Operationen in Mybatis-plus durchzuführen. Wenn Sie keine Tools wie Mybatis-plus-join verwenden, können Sie nur die entsprechende Mapper.xml-Datei konfigurieren und die stinkende und lange ResultMap konfigurieren Schreiben Sie die entsprechende SQL-Anweisung. Obwohl diese Methode umständlich erscheint, ist sie äußerst flexibel und ermöglicht es uns

1. Passen Sie den RedisTemplate1.1-Standard-Serialisierungsmechanismus an. Die API-basierte Redis-Cache-Implementierung verwendet die RedisTemplate-Vorlage für Daten-Caching-Vorgänge. Öffnen Sie hier die RedisTemplate-Klasse und zeigen Sie die Quellcodeinformationen der Klasse publicclassRedisTemplateextendsRedisAccessorimplementsRedisOperations an. Schlüssel deklarieren, verschiedene Serialisierungsmethoden des Werts, der Anfangswert ist leer @NullableprivateRedisSe

In Projekten werden häufig einige Konfigurationsinformationen benötigt. Diese Informationen können in der Testumgebung und in der Produktionsumgebung unterschiedliche Konfigurationen haben und müssen möglicherweise später basierend auf den tatsächlichen Geschäftsbedingungen geändert werden. Wir können diese Konfigurationen nicht fest im Code codieren. Am besten schreiben Sie sie in die Konfigurationsdatei. Sie können diese Informationen beispielsweise in die Datei application.yml schreiben. Wie erhält oder verwendet man diese Adresse im Code? Es gibt 2 Methoden. Methode 1: Wir können den Wert, der dem Schlüssel in der Konfigurationsdatei (application.yml) entspricht, über den mit @Value versehenen Wert erhalten. Diese Methode eignet sich für Situationen, in denen es relativ wenige Mikrodienste gibt: Tatsächlich Projekte, wenn das Geschäft kompliziert ist, Logik
