-
Notifications
You must be signed in to change notification settings - Fork 41.6k
Spring Boot 1.2 Release Notes
Spring Boot now uses Tomcat 8 and Jetty 9 as embedded servlet containers. This provides Servlet 3.1 and enhanced WebSocket support out of the box. You can still use Tomcat 7 or Jetty 8 if you prefer to stick to an older version. See the spring-boot-sample-tomcat7-jsp and spring-boot-sample-jetty8 samples for downgrade examples.
The default logging configuration has been updated with Spring Boot 1.2 to no longer write log files. If you want file output, you can use the logging.path or logging.file properties. You can still also completely customize logging by adding your own logback.xml file.
A CharacterEncodingFilter is now registered automatically for consistent URI/body decoding. You can use the spring.http.encoding.charset property if you need something other than UTF-8 or set spring.http.encoding.enabled to false if you don’t want the CharacterEncodingFilter registered at all.
Spring MVC auto-configuration now sets the ignoreDefaultModelOnRedirect property of RequestMappingHandlerAdapter to true by default. If you need model attributes to be part of your redirect URLs you can add the following to your application.properties:
spring.mvc.ignore-default-model-on-redirect=falseThe auto-configured Jackson ObjectMapper now has MapperFeature.DEFAULT_VIEW_INCLUSION and
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES disabled. If you need to revert to the previous settings you can add the following to your application.properties:
spring.jackson.mapper.default-view-inclusion=true
spring.jackson.deserialization.fail-on-unknown-properties=trueThe MongoAutoConfiguration class will no longer register a Mongo bean if you define your own MongoDbFactory bean. Ensure that you either register a Mongo bean whenever you declare your own MongoDbFactory bean, or that you only use the MongoDbFactory interface to access Mongo databases.
Health-related configuration keys have been moved from health to management.health for consistency with other management-related properties.
The VanillaHealthIndicator class has been renamed to ApplicationHealthIndicator. Most users will not interact with the class directly, however, if you previously imported org.springframework.boot.actuate.health.VanillaHealthIndicator in your code you will need to change it to org.springframework.boot.actuate.health.ApplicationHealthIndicator.
The SpringNamingStrategy class has been moved to the org.springframework.boot.orm.jpa.hibernate package. The old org.springframework.boot.orm.jpa.SpringNamingStrategy remains but is deprecated and will be removed in a future release.
Managed dependencies are now provided for hibernate-envers, hibernate-jpamodelgen and hibernate-ehcache.
The /health actuator endpoint JSON has been slightly modified when only a single HealthIndicator is involved. You might need to update any monitoring tools if you previously queried a specific JSON path.
The /health actuator endpoint now restricts anonymous access. When accessed anonymously the endpoint hides the health details and simply indicates if the server is UP or DOWN. It also caches the response for the period
specified by endpoints.health.time-to-live. These restrictions can be disabled, thereby restoring 1.1.x’s behavior, by setting endpoints.health.sensitive to false.
Spring Boot 1.2 requires Spring Framework 4.1.5 or later and is not compatible with Spring Framework 4.0.
The version of com.zaxxer:HikariCP that’s provide by Boot’s dependency management now requires Java 8. If you’re running on Java 6 or Java 7 you should update your dependency to use com.zaxxer:HikariCP-java6 instead.
The property spring.data.mongo.repositories.enabled has been renamed to spring.data.mongodb.repositories.enabled.
-
The
org.springframework.boot.actuate.system.ApplicationPidListenerclass has been superseded byApplicationPidFileWriter -
The CLI
@EnableRabbitMessagingannotation has been superseded by@EnableRabbitfrom thespring-rabbitproject. -
The
http.mappers.properties are deprecated in favor of theirspring.jackson.serialization.equivalents. -
org.springframework.boot.json.SimpleJsonParserhas been deprecated in favor ofBasicJsonParserto avoid confusion with the ``JSON Simple'' library.
Spring Boot 1.2 builds on and requires Spring Framework 4.1. Several 3rd party dependencies have been upgraded with this release including Jackson, Joda Time and Hibernate Validator. Tomcat 8 and Jetty 9 are now the default embedded servlet containers (providing Servlet 3.1 support).
A new @SpringBootApplication convenience annotation has been added which is equivalent to @Configuration + @EnableAutoConfiguration + @ComponentScan. If you find you use frequently use those three annotations, you might want to consider swapping.
Spring Boot 1.2 now supports distributed JTA transactions across multiple XA resources using either an Atomkos or Bitronix embedded transaction manager. JTA transactions are also supported when deploying to a suitable Java EE Application Server.
When a JTA environment is detected, Spring’s JtaTransactionManager will be used to manage transactions. Auto-configured JMS, DataSource and JPA beans will be upgraded to support XA transactions. You can use standard Spring idioms such as @Transactional to participate in a distributed transaction.
Additionally, general support classes are provided to make Atomkos and Bitronix easier to configure, even if you are not using @EnableAutoConfiguration. See the JTA section of the reference manual for details.
If you are using a full Java EE Application Server you can now lookup both DataSource and JMS ConnectionFactory beans from JNDI. Use the spring.datasource.jndi-name and spring.jms.jndi-name properties in your application.properties or application.yml file.
It is now possible to customize the Jackson ObjectMapper using spring.jackson properties. Jackson’s SerializationFeature, DeserializationFeature, MapperFeature, JsonParser.Feature and JsonGenerator.Feature objects can be customized using serialization, deserialization, mapper, parser and generator properties. For example to enable DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES you could add the following to your application.properties:
spring.jackson.deserialization.fail-on-unknown-properties=trueAdditionally spring.jackson.date-format and spring.jackson.property-naming-strategy properties have also been added with Spring Boot 1.2.
A new Banner interface has been added which can be used in combination with SpringApplication.setBanner(…) to provide customized banner output. The use of src/main/resources/banner.txt is still recommended for simple banners, however, the new interface is useful if you need to do something fancy.
You can now use ${application.version}, ${spring-boot.version}, ${application.formatted-version} and ${spring-boot.formatted-version} variables in your src/main/resources/banner.txt file to print your application version and/or the version of Spring Boot. The formatted-version is enclosed in brackets and includes a v prefix, for example, (v1.2.0.RELEASE).
Auto-configuration is now provided for Spring Framework 4.1’s @JmsListener annotation. The @EnableJms annotation is also auto-configured whenever you have spring-jms.jar on your classpath.
Similarly, auto-configuration is now provided for Spring AMQP 1.4’s @RabbitListener annotation. The @EnableRabbit annotation is also auto-configured whenever you have spring-rabbit.jar on your classpath. The existing Rabbit auto-configuration has also been extended to automatically create a RabbitMessagingTemplate.
Auto-configuration has been added for spring-cloud-connectors and a new spring-boot-starter-cloud-connectors POM has also been included with this release. Auto-configuration provides equivalent functionality to the @CloudScan annotation.
A new spring-boot-starter-mail `starter POM'' has been added along with auto-configuration support. You can inject a `JavaMailSender bean into your services to send emails. The spring.mail.* properties can be used to customize items such as the SMTP host.
In addition to Tomcat and Jetty, Spring Boot now supports Undertow as an embedded Servlet container. See the reference documentation for details of how to switch.
The spring CLI command line tool includes a new init option which can be used to create a project from start.spring.io. For example, to create a new web application you can type:
$ spring init -d=web myapp.zipCLI extensions can now be installed and uninstalled using the CLI itself. The spring install <maven coordinates> will grab a remote jar and install it into the CLI. spring uninstall can be used to remove a previously installed extension.
SSL can now be configured declaratively by setting the various server.ssl.* properties. Support is provided for both Tomcat and Jetty. See the reference documentation for more details.
A global endpoints.enabled property has been added to configure if endpoints should be enabled or disabled by default. This allows you to witch from the current opt-out'' model to an opt-in'' model. For example, to disable all endpoints except health you can use the following application.properties:
endpoints.enabled=false
endpoints.health.enabled=trueDataSource pool metrics are now exposed via the /metrics actuator endpoint. The number of active connections and pool usage details are exposed for Tomcat, Hikari and Commons DBCP connection pools.
If you are using Tomcat as your embedded servlet container metrics are now exposed for the number of active and maximum sessions.
The /health actuator endpoint now returns consistent JSON regardless of the number of HealthIndicators actually involved. This makes it much easier to query the JSON for a specific item.
DataSourceHealthIndicator now uses the spring.datasource.validation-query property (if it has been set) to check the health of the database.
The @ConditionalOnProperty annotation has been updated with new havingValue and matchIfMissing attributes. You can now use the condition to create much more complex property matching conditions. A new AnyNestedCondition class has also been added which can be used to compose other @Conditions. Finally, the @ConditionalOnBean annotation now supports types declared as a String attribute as well as a Class.
It is now possible to use GSON instead of Jackson to create JSON output. Jackson remains the default and recommended choice. If you use GSON you should exclude Jackson libraries from your Maven/Gradle build unless your are using Spring Boot’s Actuator which requires Jackson. As of Spring Boot 1.2.2, if both Gson and Jackson are on the classpath, you can configure your application to use Gson by setting spring.http.converters.preferred-json-mapper to gson.
The spring-actuator project includes a new org.springframework.boot.actuate.system.EmbeddedServerPortFileWriter class which can be used to write the port number of the embedded server to file when the application starts up.
Log4J is now supported as an alternative logging system and spring-boot-starter-log4j2 start POM is provided. Logback remains the default and recommended logging system.
Auto-configuration support is now provided for Jersey. Refer to reference documentation for details.
The Apache commons-dbcp2 database connection pool library is now supported in addition to Tomcat, Hikari and DBCP (v1).
The repackage task of the spring-boot-maven-plugin can now be disabled. This can be useful if you want to use spring-boot:run but you don’t need ``Fat Jars''.
The spring-boot, spring-boot-autoconfigure and spring-boot-actuator jars now include additional meta-data files which can be used by tools developers to provide `code completion'' support in `application.properties files. An annotation processor is also provided to allow you to generate your own files automatically from @ConfigurationProperties classes.
The following miscellaneous updates are also include with Spring Boot 1.2:
-
The
RedisPropertiesclass now includes adatabasefield. -
The
RelaxedDataBinderclass supportsalaisproperties. -
Regex expressions can now be used with all
keystosanitizeproperties. -
AnsiOutputcan now be configured usingspring.output.ansi.enabledproperty. -
You can now put
favicon.icofiles in/public,/static,/resourcesfolders (next to other static web assets). -
The location of the file written by
ApplicationPidFileWriter(previouslyApplicationPidListener) can now be specified using aspring.pidfileproperty or aPIDFILEenvironment variable. -
Tomcat
DataSourceinformation is now automatically exposed via JMX. -
SpringBootServletInitializersubclasses annotated with@Configurationno longer need to override the.configuremethod to register themselves a source. -
If you’re so inclined, you can now use XML as an
applicationproperties format.