小编use*_*969的帖子

Spring Boot - 如何检查特定应用程序 URL 的状态 200

我在 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)

java spring spring-boot spring-boot-admin

6
推荐指数
1
解决办法
413
查看次数

JPA 乐观锁定:如果记录已更新,如何防止删除,反之亦然?

我需要我的应用程序具有以下行为:

场景1

  1. 用户A查看订单。

  2. 用户B查看相同的订单。

  3. 用户A删除订单。
  4. 用户B请求更新订单。这应该会失败。

场景2

  1. 用户A查看订单
  2. 用户B查看同一条订单
  3. 用户 A 更新订单。
  4. 用户B请求删除订单。这应该会失败。

使用 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)

要使用这个,我必须

  1. 使用客户端的订单 ID 从数据库查找实体
  2. 将实体版本与客户端的 DTO 版本进行比较
  3. 执行删除。

问题是在步骤 2 中实体和 DTO 版本可能相同。但到了第3步,版本可能会有所不同。有没有办法让 hibernate 作为单个原子操作执行检查和更新,例如:

 delete from [Order] where orderId = ? …
Run Code Online (Sandbox Code Playgroud)

hibernate jpa optimistic-locking spring-data-jpa

5
推荐指数
0
解决办法
1299
查看次数

如何发布到 Spring Boot Actuator?

当我发出以下命令时:

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。

spring spring-boot

5
推荐指数
1
解决办法
4013
查看次数

比较 BigDecimal 值和 double 值等于小数点后两位

我正在使用返回双精度值的 API。我需要将该值与 BigDecimal 值进行比较,以便相等于两位小数。

我应该将 BigDecimal 转换为 double 然后比较

Math.abs(myBigDecimal.doubleValue() - apiDouble) >= .01
Run Code Online (Sandbox Code Playgroud)

或者这种方法有问题吗?也许我应该将 double 转换为 BigDecimal 然后进行比较?

java double bigdecimal

4
推荐指数
1
解决办法
5616
查看次数

如何为 io.freefair.lombok 设置插件

我正在尝试使用 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)

gradle lombok gradle-plugin

3
推荐指数
1
解决办法
1万
查看次数