[草稿] 解释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 是一款时序数据库。

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的动画了。你真喜欢这个横幅啊!