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注解可以在任何方法中进行度量计量…!
使用方法是
-
- 在添加spring-boot-starter-aop的依赖之后,
-
- 将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 配置更改日志
如果使用了不推荐的属性,将导致构建失败。