SpringBoot 2.4 到 2.5 更新记录

简要描述

春季启动2.5版本已经发布
我将根据发布说明整理从2.4系列升级到2.5系列的迁移方法
重点将放在与我的迁移相关或感兴趣的部分,请谅解?‍♂️

这里有过去的文章。

最低要求变动

Gradle版本已更新至6.8或更高版本。
更新至最新版本7.0.2的命令如下:

./gradlew wrapper --gradle-version 7.0.2

Gradle 默认的 jar 和 war 任务

默认情况下启用了jar、war任务。

然后,为了避免与生成的bootJar文件冲突,生成的jar和war任务文件都会附加上“-plain”。

以下是一些建议。

移除 plain

如果在archiveClassifier中指定为空字符串,则没问题。

※在版本说明书中介绍了分类器,但已被标记为不推荐使用…

archivesBaseName = 'sample'

bootJar {
    archiveClassifier = 'boot'
}

jar {
    archiveClassifier = ''
}

以此设置,将会生成以下两个jar文件。

build
...
├── libs
│   ├── sample-boot.jar
│   └── sample.jar
...

启用后禁用

将 enabled = false 的设置值可以使jar文件的生成失效。

jar {
    enabled = false
}

环境变量前缀

似乎可以给环境变量添加前缀。

要给前缀添加一个前缀,需要按照以下方式编写主类。

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(Application.class);
        application.setEnvironmentPrefix("prefix");
        application.run(args);
    }
}

在这种状态下,按照以下的方式,你可以改变”server.port”并启动应用程序。

PREFIX_SERVER_PORT=8081 ./gradlew bootRun

当然,由于无法更改SERVER_PORT,所以将此更改应用于现有系统是否有优势呢?

Prometheus的OpenMetrics

当调用/actuator/prometheus时,通过设置Header,现在可以返回OpenMetrics格式的响应。

Note: There can be variations in the translation depending on the specific context and terminology used in Chinese.

默认为Prometheus格式,如果在Accept头中添加application/openmetrics-text,则会变为OpenMetrics格式。

curl http://localhost:8080/actuator/prometheus -H 'Accept: application/openmetrics-text'

Spring Data仓库的度量标准

Spring Data仓库的指标将默认收集!✨

如果使用以下的JPA

public interface UserRepository extends CrudRepository<User, String> {
    Optional<User> findById(String id);
}

您可以获得如下的指标。

# HELP spring_data_repository_invocations_seconds_max
# TYPE spring_data_repository_invocations_seconds_max gauge
spring_data_repository_invocations_seconds_max{exception="None",method="findById",repository="UserRepository",state="SUCCESS",} 0.03175074
# HELP spring_data_repository_invocations_seconds
# TYPE spring_data_repository_invocations_seconds summary
spring_data_repository_invocations_seconds_count{exception="None",method="findById",repository="UserRepository",state="SUCCESS",} 1.0
spring_data_repository_invocations_seconds_sum{exception="None",method="findById",repository="UserRepository",state="SUCCESS",} 0.03175074

在application.yml文件中可以进行以下设置。

management:
  endpoints:
    web:
      exposure:
        include: "prometheus"
  metrics:
    data:
      repository:
        autotime:
          # 自動でメトリクスを収集するかどうか?
          # falseを指定すると個別に「@Timed」アノテーションの付与が必要
          enabled: true
          # パーセンタイルも取得する
          percentiles: 0.5,0.99
        # メトリクス名を指定する
        metric-name: "spring.data.repository.invocations"

補充:@Timed 注釋

使用@Timed注解可以在任何方法中进行度量计量…!

使用方法是

    1. 在添加spring-boot-starter-aop的依赖之后,

 

    1. 将TimedAspect注册为Bean,

 

    为想要收集指标的方法添加@Timed注解。

只需一个选项,太方便了!

dependencies {
    ...
    implementation 'org.springframework.boot:spring-boot-starter-aop'
    ...
}
import io.micrometer.core.aop.TimedAspect;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ApplicationConfiguration {
    @Bean
    public TimedAspect timedAspect(MeterRegistry registry) {
        return new TimedAspect(registry);
    }
}
import io.micrometer.core.annotation.Timed;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.Optional;

@Mapper
public interface UserRepository {
    @Timed(value = "sql.time")
    @Select("SELECT * FROM USER WHERE id = #{id}")
    Optional<User> findById(String id);
}

即使没有使用JPA,也可以通过例如Mybatis的Mapper将执行时间记录为度量。

以下为参考:

参考来源:

Java 16 / Gradle 7 支持

Java 16和Gradle 7分别得到了支持。

其他参考链接

▼Spring Boot 2.5 配置更改日志

如果使用了不推荐的属性,将导致构建失败。

广告
将在 10 秒后关闭
bannerAds