Spring Boot 2.3 版本变化[翻译]

大家好,我是烤鸭:

​ 最近在把低版本的springboot项目升级,正好翻译了下springboot 2.1-2.3 版本的更新日志。

​ Github 原文:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.3-Release-Notes

​ 2.1 版本变化:https://blog.csdn.net/Angry_Mills/article/details/113113486

​ 2.2 版本变化:https://blog.csdn.net/Angry_Mills/article/details/113116126

推荐版本: 2.3.7.RELEASE

从Spring Boot 2.2升级

更改最低要求

Spring Boot现在需要:

  • Gradle 6.3+(如果使用Gradle进行构建)。还支持5.6.x,但已弃用。
  • Jetty 9.4.22+(如果您使用Jetty作为嵌入式容器)

验证启动器不再包含在Web启动器中

从#19550开始,默认情况下,Web和WebFlux启动器不再依赖于验证启动器。例如,如果您的应用程序使用验证功能,则发现javax.validation.*导入没有得到解决,则需要自己添加启动器。

对于Maven构建,可以执行以下操作:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

对于Gradle,您将需要添加以下内容:

dependencies {...implementation 'org.springframework.boot:spring-boot-starter-validation'
}

Spring Data Neumann

Spring Boot 2.3附带了Spring Data的主要版本。如果您使用的是Cassandra,Couchbase,Elasticsearch,MongoDB或JDBC,则需要额外的注意。

Cassandra

此版本切换到Cassandra v4,该版本带来了许多向后不兼容的更改。如果您依靠ClusterBuilderCustomizer来定制Cluster,则此概念在v4中不再存在,已被两个更具体的定制器取代:

  • DriverConfigLoaderBuilderCustomizer自定义驱动程序的属性。请将此属性用于尚未暴露的任何财产。
  • CqlSessionBuilderCustomizer自定义CqlSession(原Session)。

Cassandra v4驱动程序不再具有从接触点自动进行本地DC推断的功能。因此,必须使用默认的负载平衡策略设置“本地数据中心”属性,并且联系点必须位于该数据中心。spring.data.cassandra.local-datacenter添加了新属性来设置本地数据中心。

Couchbase

此版本切换到Couchbase SDK v3,该版本带来了许多向后不兼容的更改。

  • 要连接到集群,您现在应该使用spring.couchbase.connection-string而不是前者spring.couchbase.bootstrap-hosts
  • 基于角色的访问控制现在已经得到了概括。
  • Spring Boot不再自动配置 Bucket但是您可以使用ClusterAPI轻松进行配置。
  • Endpoints IO 配置在 spring.couchbase.env.io
  • 如果要扩展CouchbaseConfiguration自定义环境,请ClusterEnvironmentBuilderCustomizer以一种更惯用的方式使用。

如果您将Couchbase与Spring Data结合使用,则需要提供存储Bucket名称。

Elasticsearch

不推荐使用的本机Elasticsearch传输已被删除,因为Elasticsearch和Spring Data本身在其下一发行版中均不支持它。在此发行版中也删除了对Jest库的支持。

Spring Boot现在默认使用Elasticsearch 7.5+。

MongoDB

此版本切换到MongoDB 4,并协调反应式(reactive)和命令式驱动程序。如果您使用的是入门程序,那么这对您应该是非常透明的。

通过这种协调,如果您使用,将不再提供非反应性基础结构spring-boot-starter-data-mongodb-reactive。如果您需要在启动时使用命令式基础架构(例如MongoOperations),请考虑添加spring-boot-starter-data-mongodb

Neo4j

Neo4j的视图拦截器中的打开会话现在默认为禁用。如果需要再次启用它,请使用standardspring.data.neo4j.open-in-view属性。

Neo4j运行状况指示器的详细信息现在包含versionedition的服务器,如以下示例所示:

neo4j: {status: "UP",details: {edition: "community",version: "4.0.0"}
}

JDBC

在其新功能中,Spring Data JDBC 2.0现在默认情况下引用标识符。这种行为可以通过调用被禁用setForceQuote(false)RelationalMappingContext

Micrometer

此版本升级到Micrometer 1.5,带来许多弃用:

  • 服务级别协议已重命名为“服务级别目标”,并且边界用double而不是表示long
  • Wavefront指标现在通过导出WavefrontSender。读取和连接超时属性废弃。

Jackson

此版本升级到Jackson 2.11,其中包括对java.util.Date和的默认格式的更改java.util.Calendar。有关详细信息,请参见FasterXML / jackson-databind#2643。

Spring Cloud Connectors启动器已删除

在2.2中不推荐使用Spring Cloud Connectors入门程序,而推荐使用Java CFEnv。该启动程序已被删除,并且Spring Boot的托管依赖项中不再包含Spring Cloud Connectors依赖项。

嵌入式Servlet Web服务器线程配置

用于配置嵌入式Servlet Web服务器(Jetty,Tomcat和Undertow)使用的线程的配置属性已移至专用threads组。属性现在可以发现server.jetty.threadsserver.tomcat.threadsserver.undertow.threads。旧属性保留为不推荐使用的形式,以简化迁移。

更改默认错误页面的内容

默认情况下,错误消息和任何绑定错误不再包含在默认错误页面中。这降低了将信息泄露给客户端的风险。 server.error.include-message并且server.error.include-binding-errors可以分别用于控制消息的包含和绑定错误。支持的值是alwayson-paramnever

磁盘空间运行状况指示器

自动配置的磁盘空间运行状况指示器不再需要在应用程序启动时被监视的路径。一条不存在的路径将被检测为具有零可用空间,从而导致指示器的响应下降。

自动创建 developmentOnlyGradle配置

developmentOnly配置主要用于声明对Spring Boot的DevTools的依赖性时,现在由Spring Boot的Gradle插件自动创建。developmentOnly可以从Gradle构建脚本中删除任何手动配置。

删除Maven网站插件管理

Spring Boot的构建不再使用站点插件(maven-site-plugin),并且其插件管理已删除。如果您依赖于Spring Boot的托管版本,则应该添加自己的插件管理。

删除Maven Exec插件自定义配置

如果您从继承spring-boot-starter-parent,它将不再配置Maven的exec插件(exec-maven-plugin)来使用来设置主类start-class。如果您依赖于此,则可以按以下方式恢复该行为:

<plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><configuration><mainClass>${start-class}</mainClass></configuration>
</plugin>

默认情况下,ApplicationContextRunner禁用Bean覆盖

为了与保持一致SpringApplicationApplicationContextRunner现在默认情况下禁用Bean覆盖。如果您需要使用bean覆盖进行测试,withAllowBeanDefinitionOverriding则可以启用它。

使用激活多个配置文件 @ActiveProfiles

现在,@ActiveProfiles注释支持包含逗号的配置文件名称。这意味着像这样的注释@ActiveProfiles("p1,p2")会将提供的值p1,p2视为单个配置文件名称。要激活多个配置文件,请像中提供每个配置文件名称作为单独的值@ActiveProfiles({"p1","p2"})

WebServerInitializedEvent和ContextRefreshedEvent

作为引入对平稳关闭的支持的一部分,Web服务器初始化现在在应用程序上下文刷新处理结束时执行,而不是在刷新处理完成后立即执行。因此,WebServerInitializedEvent现已在之前发布ContextRefreshedEvent

从Spring Boot 2.2弃用

在此发行版中删除了Spring Boot 2.2中不推荐使用的大多数类,方法和属性。请确保升级之前不调用不推荐使用的方法。

配置属性

许多属性已被重命名或弃用。您可以使用该spring-boot-properties-migrator模块来识别那些属性。一旦添加为项目的依赖项,它不仅会分析应用程序的环境并在启动时显示诊断信息,还会在运行时为您临时迁移属性。

<plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><configuration><mainClass>${start-class}</mainClass></configuration>
</plugin>
NoteOnce you’re done with the migration, please make sure to remove this module from your project’s dependencies.

Java 14支持

Spring Boot 2.3增加了对Java 14的支持。还支持Java 8和11。

使用Cloud Native Buildpack构建OCI镜像

支持使用Cloud Native Buildpacks构建Docker镜像,并已通过spring-boot:build-image goal和bootBuildImage task添加到Maven和Gradle插件中。默认情况下使用 Paketo Java buildpack创建镜像。

构建分层的jar以包含在Docker镜像中

Maven和Gradle插件已添加了对将jar文件的内容分层的支持。分层根据jar包的内容更改频率将其分隔。这种分离允许构建更有效的Docker镜像。可以重用未更改的现有图层,并将已更改的图层放置在顶部。

根据您的应用程序,您可能需要调整图层的创建方式和添加新图层的方式。这可以通过使用配置来完成,该配置描述了如何将jar分为几层,以及这些层的顺序。

创建分层jar时,spring-boot-jarmode-layertools默认情况下会将jar作为依赖项添加到jar中(可以通过构建配置禁用该jar)。将此jar放在类路径上,您可以在特殊模式下启动应用程序,该模式允许引导代码运行与应用程序完全不同的内容,例如,提取层的内容。要查看可用的选项,请使用-Djarmode=layertools以下示例启动一个 jar:

$ java -Djarmode=layertools -jar my-app.jar
Usage:java -Djarmode=layertools -jar my-app.jarAvailable commands:list     List layers from the jar that can be extracted #列出jar中可以提取的层extract  Extracts layers from the jar for image creation #从jar中提取层以创建图像help     Help about any command 

jar解压缩时的可预测的类路径顺序

使用Maven和Gradle构建的jar现在包含索引文件。当jar解压时,此索引文件用于确保类路径的顺序与直接执行jar时的顺序相同。

支持配置文件的通配符位置

加载配置文件时,Spring Boot现在支持通配符位置。默认情况下,config/*/jar外部的通配符位置受支持。当有多个配置属性源时,这在Kubernetes等环境中很有用。例如,如果您有单独的mysql和redis配置,则将它们放在/config,即/config/mysql/application.properties和中可以自动选择它们/config/redis/application.properties

正常关机

所有四个嵌入式Web服务器(Jetty,Reactor Netty,Tomcat和Undertow)以及响应式和基于Servlet的Web应用程序均支持正常关机。使用启用后server.shutdown=graceful,关闭后,Web服务器将不再允许新请求,并且将等待宽限期以完成活动请求。宽限期可以使用进行配置spring.lifecycle.timeout-per-shutdown-phase。请参阅参考文档以获取更多详细信息。

Liveness and Readiness探针

Spring Boot现在具有有关应用程序可用性的内置知识,可以跟踪应用程序是否处于活动状态以及是否已准备好处理流量。可以将运行状况端点配置为通过配置属性公开应用程序的活动性(/actuator/health/liveness)和就绪状态(/actuator/health/readinessmanagement.health.probes.enabled=true。在Kubernetes上运行时,这是自动完成的。

要了解有关此功能的更多信息,请查看此博客文章及其链接的参考文档。

Spring Data Neumann

Spring Boot 2.3附带了一个主要的Spring Data版本。请参阅Spring Data Neumann 了解更多信息。

R2DBC支持

当r2dbc在类路径上时,ConnectionFactory将以与jdbc类似的方式自动配置a DataSource。如果Spring Data在类路径上,则存储库也将像往常一样自动配置。

R2DBC支持还添加了连接工厂的运行状况指示器,ConnectionPool metrics和测试部分 @DataR2dbcTest

WebFlux应用程序的可配置基本路径

现在可以配置WebFlux应用程序的所有Web处理程序的基本路径。使用该spring.webflux.base-path属性来执行此操作。

Web应用程序中的日期时间转换

现在可以通过应用程序属性配置Web应用程序中的时间和日期时间值的转换。这补充了对格式化日期值的现有支持。对于MVC,属性分别为spring.mvc.format.timespring.mvc.format.date-time。对于WebFlux,属性分别是spring.webflux.format.timespring.webflux.format.date-time

除了采用典型的格式设置模式外,用于配置日期,时间和日期时间格式的属性现在还支持值iso。设置后,将应用相应的ISO-8601格式。

iso下列属性支持这些值:

  • spring.mvc.format.date
  • spring.mvc.format.date-time
  • spring.mvc.format.time
  • spring.webflux.format.date
  • spring.webflux.format.date-time
  • spring.webflux.format.time

Actuator 改进

配置属性的端到端可追溯性

从#17886开始,/actuator/configprops端点提供有关配置属性的端到端信息,以使其行为与环境端点保持一致。例如,在添加在application.properties添加server.server-header=Spring Boot,端点将显示以下内容:

"serverHeader": {"origin": "class path resource [application.properties]:2:22","value": "Spring Boot"
},

metrics endpoint 中的名称按字母顺序排列

/actuator/metrics/现在可以按字母顺序对处可用的度量标准名称进行排序,这使查找所需内容变得更加容易。

Query-less datasource 健康指示器

在没有验证查询的情况下,数据源HealthIndicator现在以无查询模式运行,java.sql.Connection#isValid用于验证连接。

为Web MVC和WebFlux指标提供其他标签

除了默认为MVC和WebFlux提供的标记外,现在还可以提供这些标记。可以使用WebMvcTagsContributor @BeanMVC和WebFluxTagsContributor @BeanWebFlux进行贡献。

自动配置Wavefront的发送器

Wavefront的自动配置已更新,可以定义一个WavefrontSenderbean。这允许通过单个连接将指标和跟踪发布到Wavefront。

Kafka原生指标

Kafka指标是为自动配置ConsumerFactory和创建的消费者和生产者本地发布的ProducerFactory。要为由自定义工厂创建的组件生成度量标准,应添加一个侦听器,如以下示例所示:

factory.addListener(new MicrometerConsumerListener<>(meterRegistry));
注意如果仅出于收集Kafka指标的目的而启用JMX支持,则不再需要此功能。

RSocket对Spring集成的支持

Spring Boot现在为Spring Integration的RSocket支持提供自动配置。

如果spring-integration-rsocket可用,开发人员可以使用"spring.rsocket.server.*"属性配置RSocket服务器,并使其使用IntegrationRSocketEndpointRSocketOutboundGateway组件来处理传入的RSocket消息。

绑定到 Period

如果属性需要表达一段时间,则可以使用java.time.Period属性来表达。与持续时间支持类似,它支持一种简单的格式(即10周10周)以及元数据支持。

Web服务切片测试

@WebServiceClientTest添加了新的批注以支持Web服务的“切片”测试。

依赖升级

Spring Boot 2.3移至几个Spring项目的新版本:

  • Spring Data Neumann
  • Spring HATEOAS 1.1
  • Spring Integration 5.3
  • Spring Kafka 2.5
  • Spring Security 5.3
  • Spring Session Dragonfruit

请注意,Spring Boot 2.3与Spring Boot 2.2建立在相同的Spring Framework和Reactor生成之上。

许多第三方依赖项也已更新,其中一些更值得注意的是:

  • Artemis 2.12
  • AssertJ 3.16
  • Cassandra Driver 4.6
  • Couchbase Client 3.0
  • Elasticsearch 7.6
  • Flyway 6.4
  • Hibernate Validator 6.1
  • Infinispan 10.1
  • Jackson 2.11
  • JUnit Jupiter 5.6
  • Kafka 2.5
  • Kotlin 1.3.72
  • Lettuce 5.3
  • Micrometer 1.5
  • Mockito 3.3
  • MongoDB 4.0
  • QueryDSL 4.3

其他改进

除了上面列出的更改之外,还进行了许多小的调整和改进,包括:

  • 我们在JPA支持中更新了默认配置,以改善测试体验,请参阅#16230和#16747。
  • spring-boot-autoconfigure-processor现在,来自的输出是可重复的,从而使其与Gradle的构建缓存更好地配合工作。
  • Couchbase的类型密钥可以通过进行配置spring.data.couchbase.type-key
  • OAuth2参数绑定现在可用于@WebMvcTest
  • 可以使用配置Jetty的后备队列server.jetty.max-queue-capacity
  • 可以使用来配置Liquibase的标签支持spring.liquibase.tag。现在可以通过该spring.liquibase.clear-checksums属性清除当前变更日志中的所有校验和。
  • Gradle元数据现已发布。
  • DataSourceBuilder可以用来配置SimpleDriverDataSource
  • DataSource 指标现在有描述。
  • 云平台的自动检测可以使用 spring.main.cloud-platform 来覆盖
  • 当请求具有认证时,现在支持缓存来自启动器的HTTP端点的响应。
  • 现在,Maven支持创建jar 中的project.build.outputTimestamp属性,从而使其输出可重现。
  • Maven插件的Javadoc现在已发布。
  • 提供了一个定制器接口rsocketmessagehandlercustimizer,用于定制自动配置的RSocketMessageHandler。
  • 提供了一个定制程序界面,DefaultCookieSerializerCustomizer用于定制自动配置的DefaultCookieSerializer
  • 现在可以通过设置server.servlet.register-default-servlet为来禁用默认servlet的自动配置false
  • @ConditionalOnWarDeployment添加了新条件。它可用于检测何时将应用程序作为war部署到Servlet容器或应用程序服务器。
  • 属性迁移器处理所有不赞成使用的属性,不仅包括那些具有错误级别的属性。
  • 销毁war的ServletContext时,将注销JDBC驱动程序。
  • 可以使用来配置Redis的哨兵密码spring.redis.sentinel.password

Spring Boot 2.3中的弃用

  • spring.http已经被转移到,server.servlet.encoding., spring.mvc. and spring.codec.,见#18827
  • SpringApplication#refresh(ApplicationContext)已不推荐使用SpringApplication#refresh(ConfigurableApplicationContext)
  • ON_TRACE_PARAM与所使用的server.error.include-stacktrace 属性已被重命名为ON_PARAM
  • 不推荐使用org.springframework.boot.autoconfigure.elasticsearch.rest.RestClientBuilderCustomizer 替代为org.springframework.boot.autoconfigure.elasticsearch.RestClientBuilderCustomizer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[css] span与span之间有看不见的空白间隔是什么原因引起的?有什么解决办法?

[css] span与span之间有看不见的空白间隔是什么原因引起的&#xff1f;有什么解决办法&#xff1f; 可能是设置成了inline-block。 第一种解决方案是&#xff0c;去掉span标签内的空白。 第二种解决方案是&#xff0c;设置margin负值&#xff0c;但要根据字体调整&#xff0c;…

[css] 重置(初始化)css的作用是什么?

[css] 重置&#xff08;初始化&#xff09;css的作用是什么&#xff1f; 这是一个&#xff0c;还有就是视觉问题&#xff0c;浏览器默认样式会影响我们的设计还原&#xff0c;而且默认样式一般不够美观&#xff0c;满足不了定制化的视觉需求&#xff0c;达不到视觉产品的信息传…

《代码整洁之道 Clean Architecture》-读书笔记

大家好&#xff0c;我是烤鸭&#xff1a; 关于《代码整洁之道》&#xff0c;记录一下读书笔记。 代码整洁之道第一章 整洁代码整洁代码的艺术第二章 有意义的命名避免误导有意义的区分使用读得出来和可搜索的名字避免使用编码第三章 函数第四章 注释第五章 格式第六章 对象和数…

用Java实现图片验证码功能

一、什么是图片验证码&#xff1f; 可以参考下面这张图&#xff1a; 我们在一些网站注册的时候&#xff0c;经常需要填写以上图片的信息。 1、图片生成实体类&#xff1a; 1 package com.hexianwei.graphic;2 3 import java.awt.Color;4 import java.awt.Font;5 import java.aw…

[css] 怎么让英文单词的首字母大写?

[css] 怎么让英文单词的首字母大写&#xff1f; 楼上用的没问题&#xff0c;学习嘛&#xff0c;那我就来扩展一下。text-transform 属性控制文本的大小写&#xff0c;是CSS2.1的属性&#xff0c;兼容性问题不大。 属性值是关键字&#xff0c;有41种&#xff0c;这个1是实验性属…

Zuul 1.x 升级 springcloud gateway 2.x 遇到的一点问题

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享 Zuul 1.x 升级 springcloud gateway 2.x 遇到的一点问题。 介绍 zuul 和springcloud gateway 都是比较优秀的网关&#xff0c;而 zuul 1.x 采用的是 servlet 模型&#xff0c;gate 采用的是 reactor模型&#xff0c;效率和资…

render_template 网页模板

模板简单介绍&#xff1a; 视图函数&#xff1a;视图函数就是装饰器所装饰的方法&#xff0c;视图函数的主要作用是生成请求的响应&#xff0c;这是最简单的请求。实际上&#xff0c;视图函数有两个作用&#xff1a;处理业务逻辑和返回响应内容。在大型应用中&#xff0c;把业务…

[css] 怎么才能让图文不可复制?

[css] 怎么才能让图文不可复制&#xff1f; -webkit-user-select: none; -ms-user-select: none; -moz-user-select: none; -khtml-user-select: none; user-select: none;个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷…

nacos配置刷新失败导致的cpu上升和频繁重启,nacos配置中心源码解析

大家好&#xff0c;我是烤鸭&#xff1a; nacos 版本 1.3.2&#xff0c;先说下结论&#xff0c;频繁重启的原因确实没有找到&#xff0c;跟nacos有关&#xff0c;日志没有保留多少&#xff0c;只能从源码找下头绪(出问题的版本 server用的是 nacos 1.1&#xff0c;nacos-client…

nova— 计算服务

一、nova介绍&#xff1a; Nova 是 OpenStack 最核心的服务&#xff0c;负责维护和管理云环境的计算资源。OpenStack 作为 IaaS 的云操作系统&#xff0c;虚拟机生命周期管理也就是通过 Nova 来实现的。用途与功能 :1) 实例生命周期管理2) 管理计算资源3) 网络和认证管理4)REST…

[css] 写出你知道的CSS水平和垂直居中的方法

[css] 写出你知道的CSS水平和垂直居中的方法 flex布局水平垂直居中:<!-- html --> <div class"outer"><div class"inner"></div> </div>/*css*/ .outer{display:flex;width:200px;height:200px;border:1px solid red; } .…

springcloud gateway 自定义 accesslog elk

大家好&#xff0c;我是烤鸭&#xff1a; ​ 最近用 springcloud gateway 时&#xff0c;想使用类似 logback-access的功能&#xff0c;用来做数据统计和图表绘制等等&#xff0c;发现没有类似的功能&#xff0c;只能自己开发了。 环境&#xff1a; <dependency><gr…

第二阶段团队绩效考核报告

团队绩效考核 基于各种客观问题本次绩效考核采用和第一次冲刺不一样的标准&#xff0c;根据团队贡献事实打分如下 组员打分&#xff1a; 郭良 &#xff08;9.0&#xff09; 赵承龙 &#xff08;5.5&#xff09; &#xff08;根据组内之前定下的打分细则和本期冲刺过程的事实…

[css] 实现单行文本居中和多行文本左对齐并超出显示“...“

[css] 实现单行文本居中和多行文本左对齐并超出显示"…" .one {text-align: center }.multi {overflow: hiddentext-overflow: ellipsisdisplay: -webkit-box-webkit-line-clamp: 3-webkit-box-orient: vertical }可惜多行文本省略, 有严重的兼容性问题个人简介 我…

jenkins发布docker项目 harbor

大家好&#xff0c;我是烤鸭&#xff1a; ​ jenkins 部署k8s 项目还是比较流畅的&#xff0c;本身建立多流水线项目&#xff0c;在项目中添加jenkinsfile就好了&#xff0c;镜像需要额外的参数&#xff0c;还可以添加dokcerfile文件。由于我现在的问题是不能够修改原有的项…

[css] 不使用border画出1px高的线,在不同浏览器的标准和怪异模式下都能保持效果一样

[css] 不使用border画出1px高的线&#xff0c;在不同浏览器的标准和怪异模式下都能保持效果一样 <div style"width: 100%;height: 1px;"></div><hr size"1">个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&am…

bzoj 3173 最长上升子序列

Written with StackEdit. Description 给定一个序列&#xff0c;初始为空。现在我们将\(1\)到\(N\)的数字插入到序列中&#xff0c;每次将一个数字插入到一个特定的位置。每插入一个数字&#xff0c;我们都想知道此时最长上升子序列长度是多少&#xff1f; Input 第一行一个整数…

java 调用linux 脚本并获取返回值

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享下java 调用 shell脚本 并获取返回值。 代码实践 String cmd "df -h"; StringBuffer sb new StringBuffer(); Process process Runtime.getRuntime().exec(cmd); BufferedReader br new BufferedReader(new In…

[css] 写出主流浏览器内核私有属性的css前缀

[css] 写出主流浏览器内核私有属性的css前缀 完善一下&#xff1a; Chrome&#xff1a;Blink内核 -webkit-Safari&#xff1a;WebKit内核 -webkit-Firefox &#xff1a;Gecko内核 -moz-IE&#xff1a;Trident内核 -ms-Opera&#xff1a;Presto内核 …

补充小知识:文件句柄与文件标识符

#文件句柄 这是操作系统里的一个概念&#xff0c;句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数&#xff0c;WINDOWS使用各种各样的句柄标识诸如应用程序实例&#xff0c;窗口&#xff0c;控制&#xff0c;位图&#xff0c;GDI对象等等。WINDOWS句柄有点象C语言…