[草稿] 解释Spring Boot 2.0版本发布说明的书籍

关于这篇文章

这是对Spring Boot 2.0发布说明的简单日文摘要,其中还加入了一些独自的解释。我们尽力确保了内容的准确性,但如果您想了解确切的内容,请参考上述原文。

截至2018年3月8日,此文档仍未完成。空白部分将逐渐填补,请耐心等待?‍♂️。

Java 8基础与Java 9支持

    • Java 8以上必須

JDK 6や7では動きません!!!

Java 8の機能をフル活用

インタフェースのデフォルトメソッド
コールバック(ラムダ式の活用)
Date and Time APIなどの新しいAPI

JDK 9のモジュールシステムに対応

すべてのJARはAutomatic Moduleとして作られています

Spring 5有很多来源。有关Spring 5的详细信息,请参考以下内容。
JSUG SpringOne 2017报告会

第三方库的升级

    • Tomcat 8.5

 

    • Flyway 5

 

    • Hibernate 5.2

 

    Thymeleaf 3

响应式Spring

    • Spring WebFlux & WebFlux.fn

 

    • Reactive Spring Data

現時点でリアクティブがサポートされているのはCassandra, MongoDB, Couchbase, Redis

Reactive Spring Security
Embedded Netty Server

HTTP/2支持

Tomcat、Undertow、Jetty都是被支持的,但具体取决于服务器和其他环境。
以下是引用自Spring Boot参考资料的内容。

我对HTTP/2不太了解,所以对于这部分我还没有在我的环境中进行过验证。请务必自行验证。

逆流

似乎不需要除了JDK 8之外的任何额外库,一旦更新至Undertow 1.4.0以上的版本。

码头

听说需要以下额外的库。

    • org.eclipse.jetty:jetty-alpn-conscrypt-server

 

    org.eclipse.jetty.http2:http2-server

汤姆猫

Tomcat 8.5 = Tomcat 八点五

Spring Boot的默认版本是这个版本。
要使用HTTP/2,需要在主机操作系统上安装libtcnative库及其依赖的库。请查阅Tomcat文档以获取详细信息。

Tomcat 9.0的翻译结果:乌龟猫9.0

如果将JDK 9和Tomcat 9.0导入,则似乎不需要额外的库。
要将Tomcat版本升级到9.0,对于使用Maven的情况,只需在pom.xml中添加下面的property即可。

    <properties>
        ...
        <tomcat.version>9.0.5</tomcat.version>
        ...
    </properties>

启用HTTP/2(适用于每个服务器)

在application.proeprties文件中添加server.http2.enabled=true。

属性绑定

在Spring Boot 2.0中,弛化绑定规则变得稍微严格了一些。

这篇会很长,所以我会写成另一篇文章(未创建)。

属性的定义位置可见化

当发生属性绑定异常时,错误消息会输出属性定义的位置。
例如,如果在ConfigurationProperties类中错误地定义了数据类型,将显示以下消息:
“属性’my.property[0].first-name’定义在’application.properties’的第19行”。

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to bind properties under 'my.property[0].first-name' to java.lang.Integer:

    Property: my.property[0].first-name
    Value: Jane
    Origin: class path resource [application.properties]:19:27
    Reason: Failed to convert from type [java.lang.String] to type [java.lang.Integer] for value 'Jane'; nested exception is java.lang.NumberFormatException: For input string: "Jane"

Action:

Update your application's configuration

另外,在Actuator的/env端点中,还会显示每个属性的定义位置。

{
  "name": "applicationConfig: [classpath:/application.properties]",
  "properties": {
    "spring.security.user.name": {
      "value": "user",
      "origin": "class path resource [application.properties]:1:27"
    }
  }
}

属性类型转换

Gradle插件

Kotlin:只需要一种选项,用中文进行本地化。

Actuator的改进

数据访问相关

更改连接池

在Spring Boot 1.x中,默认使用Tomcat Pool连接池,但现已更改为HikariCP。

初始化

jOOQ (即Java Object Oriented Querying)

jOOQ的方言现在可以自动从数据源中检测出来。

JdbcTemplate 数据库操作模板

JdbcTemplate的各种属性现在可以在application.properties中进行配置。具体包括以下三个属性。

spring.jdbc.template.fetch-size=-1 # Number of rows that should be fetched from the database when more rows are needed.
spring.jdbc.template.max-rows=-1 # Maximum number of rows.
spring.jdbc.template.query-timeout= # Query timeout. Default is to use the JDBC driver's default configuration. If a duration suffix is not specified, seconds will be used.

每个方法都会传入JdbcTemplate类的setFetchSize()、setMaxRows()、setQueryTimeout()方法的参数。

春季数据网络配置

InfluxDB 是一款时序数据库。

スクリーンショット 2018-03-08 13.33.53.png

Flyway/Liquibase 灵活配置

使用Flyway(代码迁移工具)的经验不多,所以不太清楚具体情况,但似乎在与数据库连接时,通常会使用常规的spring.datasource.*属性。由于我并不确定,请您确认原文链接中的内容。

冬眠

如果我们将Hibernate的ImplicitNamingStrategy和PhysicalNamingStrategy定义为Bean,那么在自动配置方面,就会为我们进行设置。大致就是这个意思。

@Configuration
public class NamingConfig {
    @Bean
    public ImplicitNamingStrategy myImplicitNamingStrategy() {
         return new MyImplicitNamingStrategy();
    }

    @Bean
    public PhysicalNamingStrategy myPhysicalNamingStrategy() {
         return new MyPhysicalNamingStrategy();
    }
}

像以前一样,也可以在application.properties中进行设置。

spring.jpa.hibernate.naming.implicit-strategy= com.example.MyImplicitNamingStrategy
spring.jpa.hibernate.naming.physical-strategy= com.example.MyPhysicalNamingStrategy

另外,还添加了HibernatePropertiesCustomizer接口。只需要创建实现类并对Bean进行定义,就可以使用它了。

自定义MongoDB客户端

新增了MongoClientSettingsBuilderCustomizer接口。

网络

上下文路径被输出到日志中。

以下是所输出的日志。顺便提一句,上下文路径可以通过 server.servlet.context-path 进行设置。

Tomcat started on port(s): 8080 (http) with context path '/foo'

初始化滤波器

Thymeleaf 茵檬叶

在spring-boot-starter-thymeleaf中添加了thymeleaf-extras-java8time。现在您可以无需任何顾虑地使用Date and Time API了!

JSON (JavaScript Object Notation) 是一种用于存储和交换数据的轻量级数据交换格式。

以下是对以上句子的汉语本土化改写:

spring-boot-starter-json(包含在spring-boot-starter-web中)默认使用Jackson。此外,还默认包含了支持日期和时间API的库。

    • jackson-datatype-jdk8

 

    • jackson-datatype-jsr310

 

    jackson-module-parameter-names

石英

加入了Quartz调度器的自动配置。还准备了一个名为spring-boot-starter-quartz的Starter。
(我从未接触过Quartz,希望有人能解释一下……!!!)

测试

@WebFluxTestが追加されました。

ConverterとGenericConverterが、@WebMvcTestや@WebFluxTestでスキャン対象になりました

@AutoConfigureWebTestClientが追加され、WebTestClientのBeanがテストで使えるようになりました。

このアノテーションは、@WebFluxTestを付加すると自動的に適用されます(ソースを読むと、@WebFluxTestに@AutoConfigureWebTestClientが付加されています)。

ApplicationContextRunnerが追加され、自作のAuto Cofigurationクラスのテストがやりやすくなりました。

公式ブログに紹介されているので、こちらを読むといいでしょう。

其他 tā)

@ConditionalOnBeanに複数条件を指定した場合、1.xではORだったのですが2.0ではANDになりました。

例えば、@ConditionalOnBean({A.class, B.class})と書いた場合、1.xではAとBいずれかのBeanがApplicationContext内にあれば有効化されたんですが、2.0ではAとB両方のBeanがApplicationContext内にある必要があります。

@ConditionalOnXxxが付いていないAuto Configurationクラスがログで出力されるようになりました。

application.propertiesでlogging.level.org.springframework.boot=debugにすると確認できます。

...
2018-03-08 15:04:36.289 DEBUG 4600 --- [           main] ConditionEvaluationReportLoggingListener : 


============================
CONDITIONS EVALUATION REPORT
============================


Positive matches:
-----------------

   AopAutoConfiguration matched:
      - @ConditionalOnClass found required classes 'org.springframework.context.annotation.EnableAspectJAutoProxy', 'org.aspectj.lang.annotation.Aspect', 'org.aspectj.lang.reflect.Advice', 'org.aspectj.weaver.AnnotatedElement'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
      - @ConditionalOnProperty (spring.aop.auto=true) matched (OnPropertyCondition)
    ...

Negative matches:
-----------------

   ActiveMQAutoConfiguration:
      Did not match:
         - @ConditionalOnClass did not find required classes 'javax.jms.ConnectionFactory', 'org.apache.activemq.ActiveMQConnectionFactory' (OnClassCondition)
    ...

Exclusions:
-----------

    None


Unconditional classes:
----------------------

    org.springframework.boot.actuate.autoconfigure.management.HeapDumpWebEndpointAutoConfiguration

    org.springframework.boot.actuate.autoconfigure.scheduling.ScheduledTasksEndpointAutoConfiguration

    org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration

...

springCLIに、Spring Securityと互換性のあるencodepasswordコマンドが追加されました。
Actuatorに/scheduledtasksエンドポイントが追加されました。@EnableSchedulingなどで定義したスケジュールタスクを一覧で確認できます。
Actuatorの/loggerエンドポイントで、ロガーのレベルをデフォルトに戻すことができるようになりました

(未確認)

Actuatorに/sessionsエンドポイントが追加されました。Spring Sessionを使っている場合、セッションを一覧したり削除したり(!)できます。

spring-boot-starter-parentを利用しているMavenプロジェクトは、デフォルトで-parametersが適用されます。

-parametersはJDK 8で追加されたコンパイルオプションで、クラスファイル内にメソッド引数名の情報を残します

Spring Boot自体のビルドツールがConcourseに変更されました。

私達ユーザーには影響はないはずですが、「何か問題があったらGitHubのIssueに書いてね」とのことです

用横幅广告来展示动画

春天启动时输出的横幅现在可以输出类似于GIF的动画了。你真喜欢这个横幅啊!

广告
将在 10 秒后关闭
bannerAds