当前位置: 首页>后端>正文

史上最全 SpringBoot 1.4.0.RELEASE 版本特性介绍(全文英译版)

Spring Boot?v1.4.0.RELEASE

Spring Boot 1.4.0 Release Notes

Upgrading from Spring Boot 1.3

Deprecations from Spring Boot 1.3

在Spring Boot 1.3中弃用的类、方法和属性已经在这个版本中删除了。请确保在升级之前没有调用已弃用的方法。

在?Apache EOL announcement?后已经删除了对Log4j 1 的支持

Renamed starters

以下启动器已被重命名,旧的启动器将在Spring Boot 1.5中删除

spring-boot-starter-ws?→?spring-boot-starter-web-services

spring-boot-starter-redis?→?spring-boot-starter-data-redis

DataSourceProperties get methods

DataSourceProperties中的一些get…方法已被更改,以与其他@ConfigurationProperties类更加一致。如果你之前在你的代码中直接调用了以下任何一个方法,你需要迁移到新的determine…()等号:

getDriverClassName()?→?determineDriverClassName()

getUrl()?→?determineUrl()

getUsername()?→?determineUsername()

getPassword()?→?determineUsername()

备注:get方法没有被弃用,但它们的行为已经改变,请确保在升级时手动检查是否使用。

DataSource binding

Prior to Spring Boot 1.4, auto-configured datasources were bound to the?spring.datasource?namespace. In 1.4, we only bind the common settings to?spring.datasource?(see?DataSourceProperties) and we have defined newspecificnamespaces for the four connections pools we support (in that order):

在Spring Boot 1.4之前,自动配置的数据源被绑定到spring.datasource名称空间。在1.4中,我们只将公共设置绑定到spring.datasource(参见DataSourceProperties),我们已经为我们支持的四个连接池定义了新的明确的命名空间(按此顺序):

spring.datasource.tomcat?for?org.apache.tomcat.jdbc.pool.DataSource

spring.datasource.hikari?for?com.zaxxer.hikari.HikariDataSource

spring.datasource.dbcp?for?org.apache.commons.dbcp.BasicDataSource

spring.datasource.dbcp2?for?org.apache.commons.dbcp2.BasicDataSource

如果使用正在使用的连接池实现的特定设置,则必须将该配置移动到相关的名称空间。例如,如果您正在使用Tomcat的testOnBorrow标志,则必须将其从spring.datasource.test-on-borrow移走到spring.datasource.tomcat.test-on-borrow。

如果在IDE中使用配置帮助,现在可以看到每个连接池都有哪些设置可用,而不是在spring.datasource 名称空间中将所有设置混合在一起。这将使您更容易地确定什么实现支持什么特性。

JTA settings binding

与数据源绑定类似,Atomikos和Bitronix的JTA提供程序特定配置属性也被绑定到spring.jta。它们现在分别被绑定到spring.jta.atomikos.properties和spring.jta.bitronix.properties;这些条目的元数据也得到了极大的改进。

Hibernate 5

Hibernate 5.0现在被用作默认的JPA持久性提供程序。如果您从Spring Boot 1.3升级,那么您将从Hibernate 4.3升级到Hibernate 5.0。请参考Hibernate迁移文档-Hibernate migration documentation?了解一般的升级说明。此外,你应该知道以下几点:

Naming Strategy

SpringNamingStrategy不再使用,因为Hibernate 5.1删除了对旧的NamingStrategy接口的支持。一个新的SpringPhysicalNamingStrategy现在是自动配置的,它与Hibernate的默认ImplicitNamingStrategy一起使用。这应该与Spring Boot 1.3默认值非常接近(如果不是完全相同的话),但是,在升级时应该检查数据库模式是否正确。

如果您在升级之前已经在使用Hibernate 5,那么您可能正在使用Hibernate 5的默认值。如果您想在升级后恢复它们,请在配置中设置此属性:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

Generator mappings

为了减少升级的痛苦,我们对于Hibernate设置了hibernate.id.new_generator_mappings=false。Hibernate团队通常不推荐这种设置,所以如果您愿意处理生成器更改,您可能希望在application.properties文件中将spring.jpa.hibernate.use-new-id-generator-mappings设置为true。

Downgrading to Hibernate 4.3

如果你在升级到Hibernate 5.0时遇到了大问题,你可以在你的pom.xml中通过重?hibernate.version属性来降级到旧的Hibernate版本:

史上最全 SpringBoot 1.4.0.RELEASE 版本特性介绍(全文英译版),第1张

或者在你的Gradle脚本重写?hibernate.version 属性:

史上最全 SpringBoot 1.4.0.RELEASE 版本特性介绍(全文英译版),第2张

备注:在Spring Boot 1.4之后,Hibernate 4.3将不受支持。如果你发现一个阻止你升级的bug-raise an issue,请提出一个问题。

@EntityScan

@org.springframework.boot.orm.jpa.EntityScan注解已经弃用,应该用@org.springframework.boot.autoconfigure.domain.EntityScan替换或显式配置。

例如,如果您有以下配置:

史上最全 SpringBoot 1.4.0.RELEASE 版本特性介绍(全文英译版),第3张

如果您使用的是自动配置LocalContainerEntityManagerFactoryBean, 切换到:

史上最全 SpringBoot 1.4.0.RELEASE 版本特性介绍(全文英译版),第4张

或者如果你正在定义你自己的LocalContainerEntityManagerFactoryBean,完全删除@EntityScan注解,调用?LocalContainerEntityManagerFactoryBean.setPackagesToScan(…?)?或者使用EntityManagerFactoryBuilder packages(…)方法:

史上最全 SpringBoot 1.4.0.RELEASE 版本特性介绍(全文英译版),第5张

Test utilities and classes

Spring?Boot 1.4附带了一个新的spring-boot-test?模块,它包含了一个完全重组的org.springframework.boot.test包。升级Spring Boot 1.3应用程序时,应该从旧包中已弃用的类迁移到新结构中的等价类。如果你正在使用Linux或OSX,你可以使用以下命令迁移代码:

find . -type f -name '*.java' -exec sed -i '' \

-e s/org.springframework.boot.test.ConfigFileApplicationContextInitializer/org.springframework.boot.test.context.ConfigFileApplicationContextInitializer/g \

-e s/org.springframework.boot.test.EnvironmentTestUtils/org.springframework.boot.test.util.EnvironmentTestUtils/g \

-e s/org.springframework.boot.test.OutputCapture/org.springframework.boot.test.rule.OutputCapture/g \

-e s/org.springframework.boot.test.SpringApplicationContextLoader/org.springframework.boot.test.context.SpringApplicationContextLoader/g \

-e s/org.springframework.boot.test.SpringBootMockServletContext/org.springframework.boot.test.mock.web.SpringBootMockServletContext/g \

-e s/org.springframework.boot.test.TestRestTemplate/org.springframework.boot.test.web.client.TestRestTemplate/g \

{} \;

此外,Spring Boot 1.4试图合理化和简化Spring Boot测试可以运行的各种方法。您应该迁移以下内容以使用新的@SpringBootTest注解:

从 @SpringApplicationConfiguration(classes=MyConfig.class)?到 @SpringBootTest(classes=MyConfig.class)

从 @ContextConfiguration(classes=MyConfig.class, loader=SpringApplicationContextLoader.class)?到 @SpringBootTest(classes=MyConfig.class)

从 @IntegrationTest?到 @SpringBootTest(webEnvironment=WebEnvironment.NONE)

从 @IntegrationTest with @WebAppConfiguration?到 @SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT)?(or?RANDOM_PORT)

从 @WebIntegrationTest?到 @SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT)?(or?RANDOM_PORT)

提示:在迁移测试时,您可能还想用Spring 4.3中可读性更强的@RunWith(SpringJUnit4ClassRunner.class)来替换任何@RunWith(SpringJUnit4ClassRunner.class)声明。

For more details on the?@SpringBootTest?annotation refer to the?updated documentation.

TestRestTemplate

TestRestTemplate?类不再直接扩展RestTemplate(尽管它继续提供相同的方法)。这允许将TestRestTemplate配置为bean,而不会意外地注入它。如果需要访问实际的底层RestTemplate,请使用getRestTemplate()方法。

Maven spring-boot.version property

spring-boot.version?属性已经从 spring-boot-dependencies?pom.删除。See?issue 5104?for details.

Integration Starter

spring-boot-starter-integration通过删除四个典型Spring Integration?应用程序不需要使用的模块而得到了简化。被删除的四个模块是:

spring-integration-file

spring-integration-http

spring-integration-ip

spring-integration-stream

如果你的应用程序依赖于这四个模块中的任何一个,你应该给你的pom或build.gradle添加一个显式的依赖项。

此外,spring-integration-java-dsl和spring-integration-jmx现在已经添加到starter中。使用DSL是在应用程序中配置Spring Integration的推荐方法。

Spring Batch Starter

spring-boot-starter-batch starter不再依赖于嵌入式数据库。如果您依赖于这种安排,请添加您选择的数据库(驱动程序),例如:

史上最全 SpringBoot 1.4.0.RELEASE 版本特性介绍(全文英译版),第6张

如果您已经配置了自己的hsqldb上的排除,那么现在可以删除该排除。

Downgrading Tomcat

从Tomcat 8.5.4开始,?tomcat-juli模块现在被打包为嵌入式Tomcat的一部分。大多数用户不会注意到这个更改,但是,如果您手动降级到较老的Tomcat版本,那么您现在需要自己添加tomcat-juli模块。有关更新的说明,请参阅如何使用文档部分-how-to documentation section?。

Dispatch Options Request

默认spring.mvc.dispatch-options-request?属性已经从false改为true,以符合Spring框架的首选默认值。如果您不希望OPTIONS请求被分派到FrameworkServlet。你应该显式地设置?spring.mvc.dispatch-options-request?为false。

Forced character encoding

强制字符编码现在只适用于请求(而不是响应)。如果您想强制对请求和响应进行编码,可以设置spring.http.encoding.force=true。

Multipart support

multipart属性已经从multipart.?命名空间移动到spring.http.multipart. 命名空间。

Server header

Server?HTTP响应头不再被设置,除非server.server-header属性被设置。

@ConfigurationProperties default bean names

当通过@EnableConfigurationProperties(SomeBean.class)注册@ConfigurationProperties bean时,我们使用<prefix>.CONFIGURATION_PROPERTIES形式生成一个bean名。从Spring Boot 1.4开始,我们已经更改了该模式,以避免两个bean使用相同前缀时发生名称冲突。

新的常规名称是<prefix>-<fqn>,其中<prefix>是@ConfigurationProperties注解中指定的环境键前缀,也是bean的完全限定名。如果注解不提供任何前缀,则只使用bean的完全限定名。

Jetty JNDI support

spring-boot-starter-jetty“Starter”不再包括org.eclipse.jetty:jetty-jndi。如果您使用具有JNDI的Jetty,您现在需要自己直接添加这个依赖项。

Guava caches

建议使用Guava缓存支持的开发人员迁移到Caffeine。

Remote Shell

CRaSH属性已经从shell.?命名空间移动到management.shell.?名称空间。另外,身份验证类型现在应该通过management.shell.auth.type来定义。

Spring Session auto-configuration improvements

Spring Boot支持更多的Spring Session后端存储:除了Redis, JDBC, MongoDB, Hazelcast和内存并发哈希映射也支持。一个新的spring.session.store-type?store-type强制属性引入了来选择应该使用的存储 Spring Session。

Launch script identity

当启动脚本确定应用程序的默认标识时,现在将使用包含jar的目录的规范名称。以前,如果包含jar的目录是一个符号链接,则使用符号链接的名称。如果需要对应用程序的标识进行更多的控制,则应该使用APP_NAME环境变量。

MongoDB 3

Mongo的Java驱动程序的默认版本现在是3.2.2(从2.14.2),spring-boot-starter-data-mongodb已经更新为使用新的首选mongodb-driver工件。

嵌入式MongoDB的自动配置也被更新为使用3.2.2作为默认版本。

Thymeleaf 3

默认情况下,Spring Boot使用的是Thymeleaf 2.1,但是现在它也兼容Thymeleaf 3,更多细节请查看更新后的文档-updated documentation。

Executable jar layout

可执行jar的布局已经改变。如果您正在使用Spring Boot的Maven、Gradle或Ant支持来构建应用程序,那么此更改不会影响您。如果你自己构建一个可执行的存档文件,请注意,应用程序的依赖项现在打包在BOOT-INF/lib中,而不是lib中,应用程序自己的类现在打包在BOOT-INF/classes中,而不是jar的根目录中。

Jersey classpath scanning limitations

对可执行jar布局的更改意味着Jersey的类路径扫描的限制(?limitation in Jersey’s classpath scanning?)现在会影响可执行jar文件和可执行war文件。为了解决这个问题,您希望Jersey扫描的类应该打包在一个jar中,并作为依赖项包含在BOOT-INF/lib中。Spring Boot启动器应该配置为在启动时解包这些jar(configured to unpack those jars on start up?),以便Jersey可以扫描它们的内容。

Integration tests with the?maven-failsafe-plugin

从Failsafe 2.19开始,target/classes不再在类路径上,而是使用项目的构建jar。由于可执行jar布局的改变,插件将无法找到你的类。有两种方法可以解决这个问题:

1. 降级到2.18.1,这样你就可以使用target/classes了

2. 配置spring-boot-maven-plugin来使用aclassifier来实现重新打包的目标。这样,原始的jar就可以被插件使用了。例如

史上最全 SpringBoot 1.4.0.RELEASE 版本特性介绍(全文英译版),第7张

备注:如果您正在使用Spring Boot的依赖项管理,那么没有什么可做的,因为默认情况下您将使用2.18.1。

Tip Watch?SUREFIRE-1198?for updates on this issue.

HornetQ

对HornetQ的支持已被弃用。HornetQ的用户应该考虑迁移到Artemis。

@Transactional?default to cglib proxies

当启动自动配置事务管理时,proxyTargetClass现在被设置为true(这意味着创建了cglib代理,而不是要求bean实现接口)。如果你想对其他没有自动配置的方面的行为进行对齐,你需要现在显式启用该属性:

@EnableCaching(proxyTargetClass=true)

备注:如果您碰巧在接口上使用了@Transactional,则必须显式地将@EnableTransactionManagement添加到配置中。这将恢复以前的行为。

New and Noteworthy

Tip Check?the configuration changelog?for a complete overview of the changes in configuration.

Spring Framework 4.3

Spring Boot 1.4 builds on and requires Spring Framework 4.3. There are a number of nice refinements in Spring Framework 4.3 including new Spring MVC?@RequestMapping?annotations. Refer to theSpring Framework reference documentationfor details.

Spring Boot 1.4构建于Spring Framework 4.3之上,并且需要Spring Framework 4.3。在Spring Framework 4.3中有许多出色的改进,包括新的Spring MVC @RequestMapping注释。详细信息请参考Spring Framework reference documentation。

注意,Spring framework 4.3中的测试框架需要JUnit 4.12。See?SPR-13275?for further details.

Third-party library upgrades

许多第三方库已经升级到最新版本。更新包括Jetty 9.3, Tomcat 8.5, Jersey 2.23, Hibernate 5.0, Jackson 2.7, Solr 5.5, Spring Data Hopper, Spring Session 1.2, Hazelcast 3.6, Artemis 1.3, Ehcache 3.1, Elasticsearch 2.3, Spring REST Docs 1.1, Spring AMQP 1.6 & Spring Integration 4.3。

几个Maven插件也进行了升级。

Couchbase support

现在为Couchbase提供了完全的自动配置支持。通过添加spring-boot-starter-data-couchbase“Starter”并提供一些配置,你可以很容易地访问Bucket和Cluster?bean:

spring.couchbase.bootstrap-hosts=my-host-1,192.168.1.123

spring.couchbase.bucket.name=my-bucket

spring.couchbase.bucket.password=secret

还可以使用Couchbase作为Spring Data?Repository?的后备存储或CacheManager。Refer to the?updated documentation?for details。

Neo4J Support

Neo4J现在提供了自动配置支持。您可以连接到远程服务器或运行嵌入式Neo4J服务器。你也可以使用Neo4J来支持Spring Data?Repository,例如:

史上最全 SpringBoot 1.4.0.RELEASE 版本特性介绍(全文英译版),第8张

Full details are provided in the?Neo4J section?of the reference documentation.

Redis Spring Data repositories

Redis现在可以用来支持Spring数据存储库。See the?Spring Data Redis?documentation for more details.

Narayana transaction manager support

自动配置支持现在包含在Narayana事务管理器中。如果您需要JTA支持,您可以选择Narayana, Bitronix或Atomkos。See?the updated reference guide?for details。

Caffeine cache support

Caffeine?v2.2 (Java 8重写了Guava的缓存支持)提供了自动配置。现有的Guava?缓存用户应该考虑迁移到Caffeine?,因为Guava?缓存支持将在未来的版本中删除。

Elasticsearch Jest support

如果Jest在类路径上,Spring Boot会自动配置JestClient和专用的HealthIndicator。即使spring-data-elasticsearch不在类路径上,也可以使用Elasticsearch。

Analysis of startup failures

Spring Boot现在将对常见的启动失败进行分析,并提供有用的诊断信息,而不仅仅是记录异常及其堆栈跟踪。例如,在Spring Boot的早期版本中,由于嵌入式servlet容器的端口正在使用而导致的启动失败如下所示:

2016-02-16 17:46:14.334 ERROR 24753 --- [? ? ? ? ? main] o.s.boot.SpringApplication? ? ? ? ? ? ? : Application startup failed

java.lang.RuntimeException: java.net.BindException: Address already in use

? ? at io.undertow.Undertow.start(Undertow.java:181) ~[undertow-core-1.3.14.Final.jar:1.3.14.Final]

? ? at org.springframework.boot.context.embedded.undertow.UndertowEmbeddedServletContainer.start(UndertowEmbeddedServletContainer.java:121) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]

? ? at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:293) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]

? ? at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]

? ? at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.RELEASE]

? ? at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]

? ? at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]

? ? at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]

? ? at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]

? ? at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]

? ? at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]

? ? at sample.undertow.SampleUndertowApplication.main(SampleUndertowApplication.java:26) [classes/:na]

Caused by: java.net.BindException: Address already in use

? ? at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_60]

? ? at sun.nio.ch.Net.bind(Net.java:433) ~[na:1.8.0_60]

? ? at sun.nio.ch.Net.bind(Net.java:425) ~[na:1.8.0_60]

? ? at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) ~[na:1.8.0_60]

? ? at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) ~[na:1.8.0_60]

? ? at org.xnio.nio.NioXnioWorker.createTcpConnectionServer(NioXnioWorker.java:190) ~[xnio-nio-3.3.4.Final.jar:3.3.4.Final]

? ? at org.xnio.XnioWorker.createStreamConnectionServer(XnioWorker.java:243) ~[xnio-api-3.3.4.Final.jar:3.3.4.Final]

? ? at io.undertow.Undertow.start(Undertow.java:137) ~[undertow-core-1.3.14.Final.jar:1.3.14.Final]

? ? ... 11 common frames omitted

在1.4版本中,它看起来是这样的:

2016-02-16 17:44:49.179 ERROR 24745 --- [? ? ? ? ? main] o.s.b.d.LoggingFailureAnalysisReporter? :

***************************

APPLICATION FAILED TO START

***************************

Description:

Embedded servlet container failed to start. Port 8080 was already in use.

Action:

Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.

如果您仍然想要查看底层原因的堆栈跟踪,可以为org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter启用调试日志记录。

Image Banners

你现在可以使用图像文件来渲染ASCII艺术横幅。一个banner.gif, banner.jpg或banner.png文件到src/main/resources,使其自动转换为ASCII。你可以使用banner.image.width和banner.image.height属性来调整大小,或使用banner.image.invert颠倒颜色。

RestTemplate builder

可以使用新的RestTemplateBuilder轻松创建具有合理默认值的RestTemplate。默认情况下,构建的RestTemplate将尝试使用类路径上可用的最合适的ClientHttpRequestFactory,并将知道要使用的MessageConverter实例(包括Jackson)。构建器包括许多有用的方法,可用于快速配置RestTemplate。例如,要添加基本的认证支持,你可以使用:

史上最全 SpringBoot 1.4.0.RELEASE 版本特性介绍(全文英译版),第9张

自动配置的TestRestTemplate现在也使用RestTemplateBuilder。

JSON Components

现在为自定义Jackson JsonSerializer和 /or?JsonDeserializer?注册提供了一个新的@JsonComponent注解。这是一种解耦JSON序列化逻辑的有用方法:

史上最全 SpringBoot 1.4.0.RELEASE 版本特性介绍(全文英译版),第10张

此外,Spring Boot现在还提供了JsonObjectSerializer和JsonObjectDeserializer基类,在序列化对象时提供了标准Jackson版本的有用替代方案。?See the?updated documentation?for details。

Convention based error pages

现在可以通过遵循基于约定的方法创建给定状态代码的自定义错误页面。在/public/error中创建一个静态HTML文件,或者使用状态代码作为文件名在/templates/error中添加一个模板。例如,要注册一个自定义404文件,可以添加src/main/resource/public/error/404.html。See?the updated reference documentation?for details。

Unified?@EntityScan?annotation

org.springframework.boot.autoconfigure.domain.EntityScan现在可以用来指定用于JPA、Neo4J、MongoDB、Cassandra和Couchbase的包。因此,JPA特有的org.springframework.boot.orm.jpa.EntityScan现在已弃用。

ErrorPageRegistry

新的ErrorPageRegistry和ErrorPageRegistrar接口允许以一致的方式注册错误页面,而不管是否使用嵌入式servlet容器。ErrorPageFilter类已经更新为ErrorPageRegistry,而不是一个虚假的ConfigurableEmbeddedServletContainer。

PrincipalExtractor

如果需要使用自定义逻辑提取OAuth2主体,现在可以使用PrincipalExtractor接口。

Test improvements

Spring Boot 1.4对测试支持进行了重大的修改。现在在专用的spring-boot-test和spring-boot-test-autoconfigure jar中提供了测试类和实用程序(尽管大多数用户将继续通过spring-boot-starter-test“Starter”来获取它们)。我们已经向测试启动器添加了AssertJ、JSONassert和JsonPath依赖项。

@SpringBootTest

在Spring Boot 1.3中,有多种编写Spring Boot测试的方法。您可以使用@SpringApplicationConfiguration、@ContextConfiguration和SpringApplicationContextLoader、@IntegrationTest或@WebIntegrationTest。在SpringBoot 1.4中,一个@SpringBootTest注解可以替换所有这些。

结合使用@SpringBootTest和@RunWith(SpringRunner.class),并根据您想要编写的测试类型设置webEnvironment属性。

一个经典的集成测试,使用一个模拟的servlet环境:

史上最全 SpringBoot 1.4.0.RELEASE 版本特性介绍(全文英译版),第11张

一个web集成测试,运行一个实时服务器在一个定义的端口上监听:

史上最全 SpringBoot 1.4.0.RELEASE 版本特性介绍(全文英译版),第12张

一个web集成测试,运行一个实时服务器在一个随机端口上监听:

史上最全 SpringBoot 1.4.0.RELEASE 版本特性介绍(全文英译版),第13张

See the?updated reference documentation?for details.

Auto-detection of test configuration

现在可以为大多数测试自动检测测试配置。如果您遵循Spring Boot为构建代码而推荐的约定,则在没有定义显式配置时将加载@SpringBootApplication类。如果您需要加载不同的@Configuration类,您可以将其作为嵌套的内部类包含在您的测试中,或者使用@SpringBootTest的classes属性。

See?Detecting test configuration?for details.

Mocking and spying beans

为了测试目的,通常希望用mock替换ApplicationContext中的单个bean。在Spring Boot 1.4中,这就像用@MockBean在测试中注解一个字段一样简单:

史上最全 SpringBoot 1.4.0.RELEASE 版本特性介绍(全文英译版),第14张

如果您想监视现有bean而不是使用完整的mock,也可以使用@SpyBean。

See the?mocking section?of the reference documentation for more details.

Auto-configured tests

对测试来说,完全的应用程序自动配置有时是多余的,您通常只想自动配置应用程序的特定“部分”。Spring Boot 1.4引入了一些专门的测试注解,可以用来测试应用程序的特定部分:

@JsonTest?- 测试JSON编组和解组。

@WebMvcTest?- 使用MockMVC测试Spring MVC @Controllers。

@RestClientTest?- 用于测试RestTemplate调用。

@DataJpaTest?- 用于测试Spring Data JPA元素

许多注解提供了特定于测试的附加自动配置。例如,如果你使用@WebMvcTest,你可以@Autowire一个完全配置的MockMvc实例。

See the?reference documentation?for details.

JSON AssertJ assertions

新的JacksonTester、GsonTester和BasicJsonTester类可以与AssertJ结合使用来测试JSON编组和解组。测试人员可以与@JsonTest注解一起使用,也可以直接在测试类中使用:

史上最全 SpringBoot 1.4.0.RELEASE 版本特性介绍(全文英译版),第15张

See the?JSON section?of the reference documentation or the Javadocs for details.

@RestClientTest

如果您想测试REST客户端,可以使用@RestClientTest注解。默认情况下,它将自动配置Jackson和GSON支持,配置RestTemplateBuilder并添加对MockRestServiceServer的支持。

Auto-configuration for Spring REST Docs

结合上述对自动配置MockMvc的支持,Spring REST Docs的自动配置已经被引入。可以使用新的@AutoConfigureRestDocs注解启用REST Docs。这将导致MockMvc实例被自动配置为使用REST Docs,并且不再需要使用REST Docs的JUnit规则。详情请参阅参考文档的相关部分-relevant section。

Test utilities

spring-boot-starter-test 现在提供?AssertJ?assertions library.

测试实用程序从org.springframework.boot.test包中已经转移到spring-boot-test专用工件。

Actuator info endpoint improvements

现在,您可以使用InfoContributor接口注册向/info执行器端点公开信息的bean。提供开箱支持:

从?git-commit-id-plugin?Maven或gradle-git-properties?Gradle 插件中生成的全部或部分Git信息(设置?management.info.git.mode=full?以显示全部细节)

从Spring Boot Maven或Gradle插件生成的构建信息。

自定义环境信息(任何属性starting?info.*)

Details are documented in the?"Application information"?section of the reference docs.

MetricsFilter improvements

MetricsFilter现在可以以经典的“merged”形式提交度量,或者按每个HTTP方法分组。使用endpoints.metrics.filter属性以更改配置:

endpoints.metrics.filter.gauge-submissions=per-http-method

endpoints.metrics.filter.counter-submissions=per-http-method,merged

Spring Session JDBC Initializer

如果将Spring Session配置为使用JDBC存储,那么模式将在启动时自动创建。

Secured connection for Artemis/HornetQ

Spring Boot现在允许通过一个安全的Artemis/HornetQ代理进行连接。

Annotation processing

Apache HttpCore 4.4.5删除了一些注解-?removed a handful of annotations。如果您正在使用注解处理器,并且正在对使用删除的注解之一的类进行子类化,那么这是一个二进制不兼容的更改。例如,如果类使用了@Immutable,你会看到编译时注解处理失败,并出现[ERROR]诊断:ERROR: cannot access org.apache.http.annotation.Immutable。

这个问题可以通过降级到HttpCore 4.4.4来避免,或者更好的是,通过结构化你的代码,这样有问题的类就不会受到编译时注释处理的影响。

Miscellaneous

server.jetty.acceptors和server.jetty.selectors属性已经添加了来配置Jetty接受器和选择器的数量

server.max-http-header-size?和 server.max-http-post-size可以被用来约束 HTTP headers 和 HTTP POSTs最大数量。 设置工作在Tomcat, Jetty和Undertow

Tomcat的最小空闲线程数量现在可以使用server.tomcat.min-spare-threads配置

现在可以在application.yml文件使用配置文件否定。在?spring.profile values中使用熟悉的!?prefix

执行器公开一个新的headdump端点,该端点返回一个GZip压缩的hprof堆转储文件

Spring Mobile现在可以为所有支持的模板引擎自动配置

Spring Boot maven插件允许使用新的includeSystemScope属性将系统范围内的工件打包

spring.mvc.log-resolved-exception启用在HandlerExceptionResolver解决异常时自动记录警告

spring.data.cassandra.schema-action用于自定义启动时的模式操作

Spring Boot的fat jar格式现在应该消耗更少的内存

现在通过spring.http.encoding.mapping.<locale>=<charset> 属性支持区域设置到字符集的映射。

默认情况下,使用spring.mvc.locale?的区域设置现在被请求的Accept-Language标头覆盖。要恢复1.3中头文件被忽略的行为,设置spring.mvc.locale-resolve固定。

Deprecations in Spring Boot 1.4

对Velocity的支持已经被弃用,因为它在Spring Framework 4.3中已经被弃用了

UndertowEmbeddedServletContainer中的一些构造函数已经弃用(大多数使用应该不受影响)。

@ConfigurationProperties注解的位置和合并属性已经弃用,而是支持直接配置环境。

保护的SpringApplication.printBanner方法不应再用于打印自定义横幅。使用Banner接口代替。

保护的InfoEndpoint.getAdditionalInfo方法已被弃用,取而代之的是InfoContributor接口。

org.springframework.boot.autoconfigure.test.ImportAutoConfiguration?已经移动到 org.springframework.boot.autoconfigure.

?org.springframework.boot.test 包下的所有类已经废弃。 See the "upgrading" notes above for details.

PropertiesConfigurationFactory.setProperties(Properties)?被废弃,取而代之的是使用PropertySources.

org.springframework.boot.context.embedded 包下的几个类被废弃 并且重新安置在org.springframework.boot.web.servlet.

org.springframework.boot.context.web包下的所有类被废弃并且被重新安置

spring-boot-starter-ws?"Starter" 已经重命名为spring-boot-starter-web-services.

spring-boot-starter-redis?"Starter" 已经重命名为spring-boot-starter-data-redis.

spring-boot-starter-hornetq?starter 和 auto-configuration已经被废弃,取而代之的是spring-boot-starter-artemis

management.security.role已经被废弃,取而代之的是management.security.roles

@org.springframework.boot.orm.jpa.EntityScan?注解已经被废弃,取而代之的是@org.springframework.boot.autoconfigure.domain.EntityScan?或 显示配置

TomcatEmbeddedServletContainerFactory.getValves()?已经被废弃,取而代之的是getContextValves().

org.springframework.boot.actuate.system.EmbeddedServerPortFileWriter?已经被废弃,取而代之的是org.springframework.boot.system.EmbeddedServerPortFileWriter

org.springframework.boot.actuate.system.ApplicationPidFileWriter已经被废弃,取而代之的是org.springframework.boot.system.ApplicationPidFileWriter

Property Renames

spring.jackson.serialization-inclusion?应该被 spring.jackson.default-property-inclusion替代

spring.activemq.pooled?should 应该被 spring.activemq.pool.enabled替代

spring.jpa.hibernate.naming-strategy应该被spring.jpa.hibernate.naming.strategy替代

server.tomcat.max-http-header-size?应该被 server.max-http-header-size替代


https://www.xamrdz.com/backend/3a71933808.html

相关文章: