Spring Boot 2.0 was finally released on May 1, 2018, and my blog has been upgraded to it from Spring Boot 1.5.9.

Spring Boot 2.0 is a major update of 17 months' work. It breaks some configurations due to refactoring and dependency updates along with it.

Package removable/rename:

  • spring-boot-starter-mobile starter is removed.
  • spring-session should be replaced by spring-session-data-redis.

Gradle plugin updates:

  • Dependency management plugin is no longer automatically applied, and should be explicitly enabled.
  • The bootRepackage task is replaced by bootJar, and as a result jar task is no longer not invoked when building executable jars. This breaks configuration for jar task.

Dependency updates:

  • Hibernate validator from 5.3.6 to 6.0.7: org.hibernate.validator.constraints.NotEmpty is deprecated and javax.validation.constraints.NotEmpty should be used.
  • Flyway: Spring Boot's default flyway.table has been changed from schema_version to flyway_schema_history.
  • spring-data-commons from 1.13 to 2.0: Configuration for 1-based pagination has to be changed.


  • AbstractErrorController, ErrorViewResolver are moved from package org.springframework.boot.autoconfigure.web to org.springframework.boot.autoconfigure.web.servlet.error.
  • FreeMarkerAutoConfiguration.FreeMarkerWebConfiguration is replaced by a package-private class, breaking the configuration that extends the class.


  • management.security.* is gone, and current solution is to configure web security programatically, making it harder to configure different strategies for different profiles.
  • All actuator endpoints are moved to /actuator by default.

One problem that I found when upgrading is that not all changes are listed in Spring Boot 2.0 release note and migration guide. You have to build the project to check errors and warning, and solve them one by one. Sometimes you have to check its source code for an alternative solution to broken configuration.