我在 Spring Boot Admin 下监控了几个应用程序。Spring Boot Admin 非常擅长告诉我应用程序是启动还是关闭以及其他各种指标。
我还想知道这些应用程序公开的某些 URL 返回的 HTTP 状态为 200。具体来说,我想每天向这些 URL 发送一次 GET 请求。如果它从其中任何一个收到非 200 状态,它会发送一封电子邮件,说明哪些 URL 报告非 200。
Spring Boot Admin 能够做什么?我知道 custom ,HealthIndicator
但不确定它是否可以安排或是否适合于此。
在我构建自己的应用程序以进行 GET 调用并发送电子邮件之前,只是想看看 Spring Boot Admin 是否提供了支持这样做的功能。
更新
URL 作为 Eureka 服务公开,我通过 Spring Cloud OpenFeign 从其他服务调用服务。
更新 2
我继续构建我自己的自定义应用程序来处理这个问题。详细信息如下,但如果 Spring 提供开箱即用的东西来做到这一点,仍然很感兴趣。
应用程序.yml
app:
serviceUrls:
- "http://car-service/cars?category=sedan"
- "http://truck-service/trucks"
cron: "0 0 10 * * *"
Run Code Online (Sandbox Code Playgroud)
网址读取为:
@Component
@ConfigurationProperties(prefix = "app")
@Getter
@Setter
public class ServiceUrls {
private String[] serviceUrls; …
Run Code Online (Sandbox Code Playgroud) 我需要我的应用程序具有以下行为:
场景1
用户A查看订单。
用户B查看相同的订单。
场景2
使用 JPA(Hibernate via Spring Data JPA),我尝试用来@Version
实现这种乐观锁定行为:
@Entity
public class Order {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Version
private Integer version;
// many other fields
Run Code Online (Sandbox Code Playgroud)
删除时,UI 客户端向服务器提供订单 ID 列表以及每个订单 ID 的版本号。这篇文章(Spring Data JPA:删除乐观锁定语义)提到了一个标准解决方案:
if (entity.getVersion() != dto.getVersion()) {
throw new OptimisticLockException("...");
}
Run Code Online (Sandbox Code Playgroud)
要使用这个,我必须
问题是在步骤 2 中实体和 DTO 版本可能相同。但到了第3步,版本可能会有所不同。有没有办法让 hibernate 作为单个原子操作执行检查和更新,例如:
delete from [Order] where orderId = ? …
Run Code Online (Sandbox Code Playgroud) 当我发出以下命令时:
curl localhost:8080/actuator/env -d'{"name":"test",value:"hello world!"}' -H "Content-type: application/json"
Run Code Online (Sandbox Code Playgroud)
我得到:
{"timestamp":"2020-03-09T16:21:18.245+0000","status":405,"error":"Method Not Allowed","message":"Request method 'POST' not supported","path":"/actuator/env
Run Code Online (Sandbox Code Playgroud)
我的 application.yml 文件公开了端点,我可以毫无问题地发出 GET 请求:
management:
endpoints:
web:
exposure:
include: "*"
Run Code Online (Sandbox Code Playgroud)
我没有启用Spring Security。如何向 Spring Actuator 端点提交 POST 请求?我正在使用 Spring Boot 2.2.5。
我正在使用返回双精度值的 API。我需要将该值与 BigDecimal 值进行比较,以便相等于两位小数。
我应该将 BigDecimal 转换为 double 然后比较
Math.abs(myBigDecimal.doubleValue() - apiDouble) >= .01
Run Code Online (Sandbox Code Playgroud)
或者这种方法有问题吗?也许我应该将 double 转换为 BigDecimal 然后进行比较?
我正在尝试使用 io.freefair.lombok 插件,但在 Gradle 4.10.2 中出现错误。我该如何设置?
plugins {
id 'org.springframework.boot' version '2.2.5.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id "io.freefair.lombok" version "4.0.0" // error on this line
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
mavenLocal()
}
dependencyManagement {
imports {
mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Hoxton.SR3'
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
runtimeClasspath 'org.springframework.boot:spring-boot-devtools'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
Run Code Online (Sandbox Code Playgroud)
这是错误:
Could not run build action using Gradle distribution 'https://services.gradle.org/distributions/gradle-4.10.2-bin.zip'.
Build …
Run Code Online (Sandbox Code Playgroud) java ×2
spring ×2
spring-boot ×2
bigdecimal ×1
double ×1
gradle ×1
hibernate ×1
jpa ×1
lombok ×1