前提

希望本文档将帮助您把应用程序迁移到 Spring Boot 2.0。

在你开始之前

首先,Spring Boot 2.0 需要 Java 8 或更高版本。不再支持 Java 6 和 7 了。

在 Spring Boot 2.0 中,许多配置属性被重新命名/删除,开发人员需要更新 application.properties/ application.yml相应的配置。为了帮助你解决这一问题,Spring Boot 发布了一个新 spring-boot-properties-migrator模块。一旦作为该模块作为依赖被添加到你的项目中,它不仅会分析应用程序的环境,而且还会在启动时打印诊断信息,而且还会在运行时为您暂时迁移属性。在您的应用程序迁移期间,这个模块是必备的:


  1. <dependency>

  2. <groupId>org.springframework.boot</groupId>

  3. <artifactId>spring-boot-properties-migrator</artifactId>

  4. </dependency>

注意:完成迁移后,请确保从项目的依赖关系中删除此模块。

构建您的 Spring Boot 应用程序

Spring Boot Maven 插件

为了保持了一致性,并且避免与其他插件发生冲突,现在暴露的插件配置属性都以一个 spring-boot前缀开始。

例如,以下命令 prod使用命令行启用配置文件


  1. mvn spring-boot:run -Dspring-boot.run.profiles=prod

Surefire 默认值

以前的 include/exclude 模式已与最新的 Surefire 默认设置保持一致。如果依赖于此插件,需要相应地更新插件配置。之前对应的配置如下:


  1. <plugin>

  2. <groupId>org.apache.maven.plugins</groupId>

  3. <artifactId>maven-surefire-plugin</artifactId>

  4. <configuration>

  5. <includes>

  6. <include>**/*Tests.java</include>

  7. <include>**/*Test.java</include>

  8. </includes>

  9. <excludes>

  10. <exclude>**/Abstract*.java</exclude>

  11. </excludes>

  12. </configuration>

  13. </plugin>

PS: 如果您使用 JUnit 5,则应将 Surefire 降级到 2.19.1。该 **/*Tests.java版本不包含此模式,因此如果您依赖该模式,请确保将其添加到您的配置中。

Spring Boot Gradle 插件

Spring Boot 的 Gradle 插件在很大程度上已被重写,有了重大的改进。您可以在其参考文献和API文档中阅读关于插件功能的更多信息。

依赖管理

Spring Boot 的 Gradle 插件不再自动应用依赖管理插件。相反,Spring Boot 的插件现在可以通过导入正确版本的spring-boot-dependencies BOM 来应用依赖管理插件。当依赖管理被配置的时候,这一点会让你有更多的控制权。

对于大多数应用程序,使用应用依赖管理插件就足够了:


  1. apply plugin: 'org.springframework.boot'

  2. apply plugin: 'io.spring.dependency-management' // <-- add this to your build.gradle

注意:依赖管理插件仍然是 spring-boot-gradle-plugin 的传递依赖项,所以不需要在 buildscript 配置中将其列为类路径依赖项。

建立可执行的 Jars 和 Wars

bootRepackage 任务已经被替换成 bootJarbootWar 任务,分别用于构建可执行的 jar 包和 war包。

配置更新

BootRunBootJarBootWar任务现在都使用 mainClassName的属性来配置主类的名称。这使得三个特定于引导的任务相互一致,并将其与 Gradle 自己的应用程序插件进行对齐。

Spring Boot 特性

默认动态代理策略

Spring Boot 默认使用 CGLIB 做动态代理代理(基于类的动态代理),包括对 AOP 的支持。如果你需要基于接口的动态代理,你需要将 spring.aop.proxy-target-class 设置为 false

SpringApplication

Web 环境

Spring Boot 应用程序现在可以在更多模式下运行,因此 spring.main.web-environment现在不推荐使用, spring.main.web-application-type属性可以提供更多的支持。

如果您想确保应用程序不启动 Web 服务器,则必须将该属性更改为:


  1. spring.main.web-application-type=none

注意:可以通过 SpringApplicationsetWebApplicationType 方法实现。

Spring Boot 应用程序事件更改

我们已经添加了一个新事件 ApplicationStartedEventApplicationStartedEvent在上下文刷新之后但在任何应用程序和命令行参数被调用之前发送。 ApplicationReadyEvent在任何应用程序和命令行参数被调用后发送。它表示应用程序已准备好为请求提供服务。

请参阅更新的参考文档。

Banner

在我们限制 Spring Boot 使用的根名称空间的数量的过程中,与标志相关的属性已被重定位到 spring.banner

外部化配置

轻松的绑定

有关宽松绑定的规则已经收紧。我们假设一个现有的 acme.my-project.my-name属性:

  1. 所有前缀必须是 kebab格式(小写,连字符分隔) acme.myProject或 acme.my_project无效 - 您必须 acme.my-project在此处使用。

  2. 属性名称可以使用 kebab-case( my-name),camel-case( myName)或 snake-case( my_name)。

  3. 环境属性(来自操作系统环境变量)必须使用通常的大写下划线格式,下划线只能用于分隔键的各个部分 ACME_MYPROJECT_MYNAME

这种新的放松绑定具有以下几个优点:

  • 无需担心密钥的结构 @ConditionalOnProperty:只要密钥是以规范格式定义的,支持的松散变体就可以透明地工作。如果您正在使用该 prefix属性,则现在只需使用 name或 value属性即可放置完整密钥。

  • RelaxedPropertyResolver不再可以 Environment自动处理: env.getProperty("com.foo.my-bar")将找到一个 com.foo.myBar属性。

org.springframework.boot.bind软件包不再可用,并被新的宽松绑定规则所取代。特别是, RelaxedDataBinder朋友已被新的 BinderAPI 取代。以下样品 MyPropertiesapp.acme前缀中进行绑定。


  1. MyProperties target = Binder.get(environment)

  2. .bind("app.acme", MyProperties.class)

  3. .orElse(null);

由于现在内置了轻松绑定,因此只要使用其中一种支持的格式,就可以请求任何属性而不必关心案例:


  1. FlagType flagType = Binder.get(environment)

  2. .bind("acme.app.my-flag", FlagType.class)

  3. .orElse(FlagType.DEFAULT);

@ConfigurationProperties 验证

如果您想打开验证,现在必须为您的 @ConfigurationProperties对象添加注释 @Validated

配置位置

spring.config.location配置的方式已被修复; 它提前将一个位置添加到默认位置列表中,现在它将替换默认位置。如果你是按照以前的方式进行处理,现在应该使用它 spring.config.additional-location进行替换。

开发 Web 应用程序

嵌入式容器包装结构

为了支持响应式用例,嵌入式容器包结构已经被大幅度的重构。 EmbeddedServletContainer已被重新命名为, WebServer并且该 org.springframework.boot.context.embedded包已被重新定位到 org.springframework.boot.web.embedded。例如,如果您使用 TomcatEmbeddedServletContainerFactory回调接口定制嵌入式 Tomcat 容器,则应该使用 TomcatServletWebServerFactory

特定于 Servlet 的服务器属性

许多 server.* 属性 ( Servlet 特有的) 已经转移到 server.servlet

旧的属性 新的属性
server.context-parameters.* server.servlet.context-parameters.*
server.context-path server.servlet.context-path
server.jsp.class-name server.servlet.jsp.class-name
server.jsp.init-parameters.* server.servlet.jsp.init-parameters.*
server.jsp.registered server.servlet.jsp.registered
server.servlet-path server.servlet.path
Web Starter 作为传递依赖

以前有几个 Spring Boot starter 是依赖于 Spring MVC 而传递的 spring-boot-starter-web。在 SpringWebFlux 新的支持下, spring-boot-starter-mustachespring-boot-starter-freemarkerspring-boot-starter-thymeleaf不再依赖它。开发者有责任选择和添加 spring-boot-starter-webspring-boot-starter-webflux

模板引擎

Mustache 模板曾经的文件扩展名是 .html,现在的扩展名为 .mustache ,与官方规范和大多数 IDE 插件一致。您可以通过更改 spring.mustache.suffix配置键来覆盖此新的默认值。

Jackson / JSON 支持

在 2.0 中,我们改变了 Jackson 配置的默认值,将 ISO-8601 字符串 写为 JSR-310 日期 。如果你想回到以前的行为,你可以添加 spring.jackson.serialization.write-dates-as-timestamps=true到你的配置。

新的 spring-boot-starter-json starter 收集了必要的位去读写 JSON。它不仅提供了 jackson-databind,而且提供了和 Java8 一起运作的时候相当有用的组件: jackson-datatype-jdk8,jackson-datatype-jsr310jackson-module-parameter-names。如果你曾经手动地依赖这些组件,现在可以依赖这个新的 starter 取代。

Spring MVC 路径匹配默认行为更改

我们已决定在 Spring MVC 应用程序中更改后缀路径匹配的默认值(请参阅#11105)。按照 Spring Framework 中记录的最佳实践,此功能不再默认启用。

如果您的应用程序希望将请求 "GET /projects/spring-boot.json"映射到 @GetMapping("/projects/spring-boot")映射,则此更改会影响您。

有关此更多信息以及如何减轻此更改,请查阅Spring Boot中有关路径匹配和内容协商的参考文档。

Servlet 过滤器

Servlet 过滤器的默认调度程序类型现在是 DipatcherType.REQUEST; 这使 Spring Boot 的默认值与 Servlet 规范的默认值一致。如果您希望将过滤器映射到其他调度程序类型,请使用 FilterRegistrationBean注册您的过滤器。

注意:Spring Security 和 Spring Session 过滤器配置 ASYNC, ERROR以及 REQUEST 调度类型。

RestTemplateBuilder

requestFactory(ClientHttpRequestFactory)方法已被新 requestFactory(Supplier<ClientHttpRequestFactory>requestFactorySupplier)方法所取代。 Supplier允许构建器生成的每个模板使用它自己的请求工厂,从而避免共享工厂可能导致的副作用。见#11255。

WebJars 定位器

Spring Boot 1.x 使用并提供依赖关系管理 org.webjars:webjars-locatorwebjars-locator是一个“命名不佳的库......包装 webjars-locator-core项目”。 org.webjars:webjars-locator应该更新依赖项来 org.webjars:webjars-locator-core代替使用。

Security

Spring Boot 2 极大地简化了默认的安全配置,并使添加定制安全变得简单。Spring Boot 现在具有一种行为,只要您添加自己的 WebSecurityConfigurerAdapter 就会退出,而不是进行多种与安全性相关的自动配置。

如果您使用以下任何属性,则会受到影响:


  1. security.basic.authorize-mode

  2. security.basic.enabled

  3. security.basic.path

  4. security.basic.realm

  5. security.enable-csrf

  6. security.headers.cache

  7. security.headers.content-security-policy

  8. security.headers.content-security-policy-mode

  9. security.headers.content-type

  10. security.headers.frame

  11. security.headers.hsts

  12. security.headers.xss

  13. security.ignored

  14. security.require-ssl

  15. security.sessions

默认安全

安全自动配置不再公开选项,并尽可能使用 Spring Security 默认值。一个明显的副作用是使用 Spring Security 的内容协商进行授权(表单登录)。

默认用户

默认情况下,Spring Boot 使用生成的密码配置单个用户。用户可以使用 spring.security.user.*属性进行配置。要进一步定制用户或添加其他用户,您将不得不公开一个 UserDetailsServicebean。

AuthenticationManager Bean

如果您想将 Spring Security AuthenticationManager作为 bean 公开,请覆盖 authenticationManagerBean您的方法 WebSecurityConfigurerAdapter并为其添加注释 @Bean

OAuth2

从功能的 Spring Security OAuth 项目 迁移到核心 Spring Security。不再为依赖关系提供依赖管理,Spring Boot 2 通过 Spring Security 5 提供 OAuth 2.0 客户端支持。

如果您依赖尚未迁移的 Spring Security OAuth 功能,则需要在其他 jar 上添加依赖项,请查看文档以获取更多详细信息。我们还继续支持 Spring Boot 1.5,以便旧版应用程序可以继续使用它,直到提供升级路径。

执行器安全

执行器不再有单独的安全自动配置( management.security.*属性消失)。 sensitive每个端点的标志也没有在安全配置中变得更加明确。如果您依赖于此行为,则需要创建或调整您的安全配置,以保护您选择角色的端点。

例如,假设以下配置:


  1. endpoints.flyway.sensitive=false

  2. endpoints.info.sensitive=true

  3. management.security.roles=MY_ADMIN


  1. http

  2. .authorizeRequests()

  3. .requestMatchers(EndpointRequest.to("health", "flyway")).permitAll()

  4. .requestMatchers(EndpointRequest.toAnyEndpoint()).hasRole("MY_ADMIN")

  5. ...

需要注意的是在 2.xhealthinfo在默认情况下启用(与 health默认情况下不显示其细节)。为了与这些新的默认值一致, health已被添加到第一个匹配器。

使用 SQL 数据库

配置数据源

默认连接池已从 Tomcat 切换到 HikariCP。如果您过去 spring.datasource.type在基于 Tomcat 的应用程序中强制使用 Hikari,现在可以删除重写。

特别是,如果你有这样的设置:


  1. <dependency>

  2. <groupId>org.springframework.boot</groupId>

  3. <artifactId>spring-boot-starter-data-jpa</artifactId>

  4. <exclusions>

  5. <exclusion>

  6. <groupId>org.apache.tomcat</groupId>

  7. <artifactId>tomcat-jdbc</artifactId>

  8. </exclusion>

  9. </exclusions>

  10. </dependency>

  11. <dependency>

  12. <groupId>com.zaxxer</groupId>

  13. <artifactId>HikariCP</artifactId>

  14. </dependency>

现在可以这样修改:


  1. <dependency>

  2. <groupId>org.springframework.boot</groupId>

  3. <artifactId>spring-boot-starter-data-jpa</artifactId>

  4. </dependency>

WARN 消息隐含的'打开在视图'

从现在起,未明确启用的应用程序 spring.jpa.open-in-view将在启动过程中收到警告消息。虽然这种行为是一种友好的默认行为,但如果您没有完全意识到为您做了什么,这可能会导致问题。此消息可确保您了解可在查看呈现期间执行数据库查询。如果你没有问题,你可以明确地配置这个属性来消除警告信息。

JPA 和 Spring Data

在 Spring Boot 1.x 中,一些用户正在扩展 HibernateJpaAutoConfiguration以将高级自定义应用于自动配置 EntityManagerFactory。为了防止发生这种错误的用例,Spring Boot 2 中不再可能扩展它。

为了支持这些用例,现在可以定义一个 HibernatePropertiesCustomizerbean,它可以完全控制 Hibernate 属性,包括注册在上下文中声明为 bean 的 Hibernate 拦截器的能力。

Flyway

Flyway 配置键被移动到 spring命名空间(即 spring.flyway

升级到 Spring Boot 2 将会将 Flyway 升级 3.x5.x。为确保模式升级顺利进行,请按照以下说明操作:

  • 首先将您的 1.5.xSpring Boot 应用程序升级到 Flyway 4,请参阅Maven和Gradle的说明。

  • 一旦您的架构升级到了 Flyway 4,升级到 Spring Boot 2 并再次运行迁移以将您的应用程序移植到 Flyway 5。

Liquibase

Liquibase 配置键被移动到 spring命名空间(即 spring.liquibase

数据库初始化

基本 DataSource初始化现在仅针对嵌入式数据源启用,并将在您使用生产数据库时立即关闭。新的 spring.datasource.initialization-mode(替换 spring.datasource.initialize)提供更多的控制。

更新默认的'创建 - 删除'处理

spring.jpa.hibernate.ddl-auto 属性默认为只有在没有使用 Liquibase 或 Flyway 等模式管理器时才使用嵌入式数据库进行创建。一旦检测到模式管理器,默认更改为 none

整合 NoSQL

Redis

现在使用的是 Lettuce 而不是 Jedis 作为 Redis 驱动程序 spring-boot-starter-redis。如果您使用更高级别的Spring Data 构造,则应该发现变化是透明的。我们仍然支持 Jedis,如果您愿意,通过排除 io.lettucelettuce-core并添加 redis.clientsjedis,则可以自由切换依赖项。

Elasticsearch

Elasticsearch 已经升级到 6.0+。与 Elastic 宣布嵌入式 Elasticsearch 不再受支持一致,自动配置 NodeClient已被删除。 TransportClient可以通过使用 spring.data.elasticsearch.cluster-nodes提供要连接的一个或多个节点的地址来自动配置。

高速缓存

用于缓存的专用 Hazelcast 自动配置。

无法自动配置常规 HazelcastInstance和专用 HazelcastInstance缓存。因此,该 spring.cache.hazelcast.config属性已不再可用。

批量

在启动时执行批处理作业的 CommandLineRunner 的顺序为 0。

测试

Mockito 1.x

Mockito 1.x 不再支持 @MockBean@SpyBean。如果你不用 spring-boot-starter-test来管理你的依赖关系,你应该升级到 Mockito 2.x.

Spring Boot Actuator

Spring Boot 2 为 Actuator 带来了重要变化,无论是内部还是面向用户,请查阅参考指南中的更新部分和新的Actuator API文档。

您应该期望编程模型,配置密钥和某些端点的响应格式发生变化。Actuator 现在在 Spring MVC,Spring WebFlux 和Jersey 上得到本地支持。

构建

Actuator 的代码分为两个模块:现有的 spring-boot-actuator和新的 spring-boot-actuator-autoconfigure。如果您使用原始模块( spring-boot-actuator)导入 actuator,请考虑使用 spring-boot-starter-actuator启动器替代它。

Keys 的配置结构

Endpoints 基础配置 key 已经统一:

旧的属性 新的属性
endpoints.<id>.* management.endpoint.<id>.*
endpoints.cors.* management.endpoints.web.cors.*
endpoints.jmx.* management.endpoints.jmx.*
management.address management.server.address
management.context-path management.server.servlet.context-path
management.ssl.* management.server.ssl.*
management.port management.server.port

基本路径

所有 endpoints 默认情况下都已移至 /actuator

我们修改了 management.server.servlet.context-path 的含义:它现在是 server.servlet.context-path 的端点管理的等价替代(只有在设置了 management.server.port 时才有效)。另外,您还可以使用新的单独属性 management.endpoints.web.base-path 为管理端点设置基本路径。

例如,如果你设置 management.server.servlet.context-path=/managementmanagement.endpoints.web.base-path=/application,你就可以在下面的路径到达终点健康: /management/application/health

如果你想恢复 1.x 的行为(即具有 /health代替 /actuator/health),设置以下属性:


  1. management.endpoints.web.base-path=/

审计事件 API 更改

AuditEventRepository 现在有一个包含所有可选参数的单一方法。

Endpoints

要通过 HTTP 使执行器端点可用,它需要同时启用公开。默认:

  • 无论您的应用程序中是否存在和配置 Spring Security,只有端点 /health和 /info端点都是暴露的。

  • 所有端点,但 /shutdown已启用。

您可以按如下方式公开所有端点:


  1. management.endpoints.web.exposure.include=*

您可以通过以下方式显式启用 /shutdown端点:


  1. management.endpoint.shutdown.enabled=true

要公开所有(已启用)网络端点除 env端点之外:


  1. management.endpoints.web.exposure.include=*

  2. management.endpoints.web.exposure.exclude=env

Endpoint changes
1.x 端点 2.0 端点(改变)
/actuator 不再可用。 但是,在 management.endpoints.web.base-path的根目录中有一个映射,它提供了到所有暴露端点的链接。
/auditevents 该 after参数不再需要
/autoconfig 重命名为 /conditions
/docs 不再可用
/health 现在有一个 management.endpoint.health.show-details 选项neveralwayswhen-authenticated,而不是依靠 sensitive标志来确定 health 端点是否必须显示全部细节。 默认情况下, /actuator/health公开并且不显示细节。
/trace 重命名为 /httptrace

端点属性已更改如下:

  • endpoints.<id>.enabled 已经转移到了 management.endpoint.<id>.enabled

  • endpoints.<id>.id 没有替换(端点的 ID 不再可配置)

  • endpoints.<id>.sensitive没有替代品(请参见执行器安全)

  • endpoints.<id>.path 已经转移到了 management.endpoints.web.path-mapping.<id>

端点格式

/actuator/mappings 端点大改变

JSON 格式已经更改为现在正确地包含有关上下文层次结构,多个 DispatcherServlets部署的 Servlet 和 Servlet 过滤器的信息。详情请参阅#9979。

Actuator API 文档的相关部分提供了一个示例文档。

/actuator/httptrace 端点大改变

响应的结构已经过改进,以反映端点关注跟踪 HTTP 请求 - 响应交换的情况。

迁移自定义端点

如果您有自定义执行器端点,请查看专用博客文章。该团队还撰写了一个 wiki 页面,介绍如何将现有的执行器端点迁移到新的基础架构。

Metrics

Spring Boot 自己的指标已被支持取代,包括自动配置,用于 icrometer 和 dimensional 指标。

设置 icrometer

如果您的 Spring Boot 2.0 应用程序已依赖于 Actuator,则 icrometer 已在此处并自动配置。如果您希望将度量标准导出到 Prometheus,Atlas 或 Datadog 等外部注册表,Micrometer 将为许多注册表提供依赖关系; 您可以使用 spring.metrics.*属性配置您的应用程序以导出到特定的注册表。

迁移定制计数器/量表

您可以通过以下方式创建各种指标,而不是在应用程序代码中注入 CounterServiceGaugeService的实例:

  • 注入 MeterRegistry和调用方法。

  • 直接调用静态方法 CounterfeatureCounter=Metrics.counter("feature");

开发者工具

热拔插

由于 Spring Loaded 项目被搁置,它在 Spring Boot 的支持已被删除。我们建议使用 Devtools。

Devtools 远程调试隧道

已经从 Devtools 中删除了对通过 HTTP 进行隧道远程调试的支持。

已删除的功能

以下功能不再可用:

  • CRaSH 支持

  • Spring Mobile 的自动配置和依赖关系管理。

  • Spring Social 的自动配置和依赖关系管理。

  • 依赖关系管理 commons-digester

依赖版本

以下库的最低支持版本已更改:

  • Elasticsearch 5.6

  • Gradle 4

  • Hibernate 5.2

  • Jetty 9.4

  • Spring Framework 5

  • Spring Security 5

  • Tomcat 8.5

参考资料

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide

推荐阅读

  • Spring Boot 2.0 新特性(二):新增事件ApplicationStartedEvent

  • Spring Boot 2.0 新特性(一):配置绑定 2.0 全解析

  • Spring Boot 2.0正式发布,升还是不升呢?

  • Spring Boot 2.0 新特性概览

  • Spring Boot/Cloud干货汇总

  • Spring Cloud Gateway真的有那么差吗?

长按指纹

一键关注



深入交流、更多福利

扫码加入我的知识星球


点击 “阅读原文” 看看本号其他精彩内容

【译】Spring Boot 2.0 官方迁移指南相关推荐

  1. Spring Boot 2.0 热部署指南

    Spring Boot 2.0 支持热部署,实现方法很简单 Spring Boot 2.0 有几种热重载的选项. 推荐的方法是使用spring-boot-devtools 因为它提供了额外的开发时间功 ...

  2. Spring Boot 2.0正式发布,升还是不升呢?

    Spring帝国 Spring几乎是每一位Java开发人员都耳熟能详的开发框架,不论您是一名初出茅庐的程序员还是经验丰富的老司机,都会对其有一定的了解或使用经验.在现代企业级应用架构中,Spring技 ...

  3. Spring Boot 2.0 迁移指南

    点击上方"朱小厮的博客",选择"设为星标" 回复"666"获取新整理的1000+GB资料 前提 本文档将帮助您把应用程序迁移到 Spring ...

  4. Spring Boot 3.0 正式发布,这份升级指南必须收藏

    Spring Boot 3.0 现已正式发布,它包含了 12 个月以来 151 个开发者的 5700 多次代码提交.这是自 4.5 年前发布 2.0 以来,Spring Boot 的第一次重大修订. ...

  5. Spring Boot 2.0 都更新了什么

    Spring Boot 2.0 都更新了什么 2018 年 3 月 1 号 Spring Boot 2.0.0.RELEASE 正式发布,这是 Spring Boot 1.0 发布 4 年之后第一次重 ...

  6. Spring Boot 3.0.0-M1 Reference Documentation(Spring Boot中文参考文档) 9-16

    9. 数据 Spring Boot与多个数据技术集成,包括SQL和NoSQL. 9.1. SQL数据库 Spring Framework提供扩展支持用于与SQL数据工作,从使用JdbcTemplate ...

  7. Spring Boot 2.0系列文章(四):Spring Boot 2.0 源码阅读环境搭建

    前提 前几天面试的时候,被问过 Spring Boot 的自动配置源码怎么实现的,没看过源码的我只能投降��了. 这不,赶紧来补补了,所以才有了这篇文章的出现,Spring Boot 2. 0 源码阅 ...

  8. Spring Boot 3.0.0 发布第一个里程碑版本M1,你的 Java 升到 17 了吗?

    欢迎关注方志朋的博客,回复"666"获面试宝典 ‍ ‍文章来源:程序猿DD‍ ‍ 2022年1月20日,Spring官方发布了Spring Boot 3.0.0的第一个里程碑版本M ...

  9. Spring Boot 2.0 新特性

    作者:贺卓凡 原文:https://mp.weixin.qq.com/s/EWmuzsgHueHcSB0WH-3AQw 以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8 ...

最新文章

  1. Java基础-注解和反射
  2. 【Android 逆向】Android 进程注入工具开发 ( 远程调用总结 | 远程调用注意事项 )
  3. hdu 3944 DP? (Lucas 定理)
  4. java黄金分割点游戏_结对编程1——黄金点小游戏项目简介及需求分析
  5. 州的先生 python界面 代码完整版(注释)
  6. js 下拉层级多选_js控制的多级下拉菜单
  7. 实参与形参不兼容怎么解决_上岗证报名照片无法上传非官方解决方案
  8. unity3d实现序列帧动画
  9. raptor五个数排序流程图_看了这篇文章,我发现排序算法好简单
  10. 那些年的草根站长,都被时代淘汰了吗?
  11. java蘑菇岛种子_我的世界:以2002年2月12日为种子代码,居然是蘑菇岛神级种子!...
  12. 印能捷服务器中文字显示方块,修改Preps中文标记字体解决PJTF/JDF无法导入印能捷问题...
  13. 35岁的程序员:第12章,林菲菲
  14. 无人机飞控平台ArduPilot源码入门教程 — 简介
  15. 2021年茶艺师(初级)模拟考试及茶艺师(初级)实操考试视频
  16. 麻雀算法SSA,优化VMD,适应度函数为最小包络熵,包含MATLAB源代码,直接复制粘贴!
  17. tc275的flexcan的接收与发送
  18. 由Elasticsearch的API命令,引发的金融业生产故障
  19. c#开发Windows服务程序及部署
  20. 矢量化图形工具VTracer

热门文章

  1. linux ftp 命令集合
  2. golang 读取文件
  3. python3 not 用法
  4. python 字符串前面加u,r,b,f的含义
  5. linux 僵尸进程 defunct
  6. 进程特征码遍历VC版
  7. MBR区、DBR区、FAT区、DIR区和DATA区的区别
  8. Android--多点触控事件捕捉
  9. error: Upgrade DB using Essex release first.
  10. php fatal class ziparchive not found,php中Fatal error: Class ZipArchive not found的解决办法