Spring Boot 1.x to 2.x Migration Notes
Have been upgrading services from Spring Boot 1.4.x or 1.5.x to 2.2.2. These notes do not apply as well to other 2.x versions (like 2.1).
Need to define Spring Boot Gradle Plugin version to Spring Boot version desired (e.g. 2.2.2).
Whatever Spring Boot version is used, since we use OAuth2 for security, we need to explicitly define in gradle the same version for Spring OAuth2 Security
org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.2.2.RELEASE
Update Flyway to v6 (6.0.8, according to https://docs.spring.io/spring-boot/docs/2.2.x/reference/html/appendix-dependency-versions.html)
Because of this, will need to refactor Flyway-related Java callback code to use new classes and methods
Update RAML tester and RAML parser to latest (0.8.15 and 0.8.37), because of test failures
Update Mockito and PowerMock to latest (may have been some test failures without updating)
Update REST Assured to at least version 3.3, because of some integration test issues
JPA repository methods have been renamed (e.g. findOne to findById, delete to deleteById, etc.), and now return Optional
PageRequest constructor has been replaced with PageRequest.of(), same with Sort
MAJOR Spring Framework v5 has dropped JasperReports support, in favor of clients using native JasperReports API (https://github.com/spring-projects/spring-framework/issues/17884), so any services that use it will need to be refactored (see openlmis-report for a refactor pattern)
For some reason, integration tests now require some API definitions in the YAML have an entry for “Keep-Alive” header
Flyway config in application properties file uses
spring.flyway
rather thanflyway
nowBean definition overriding is now disabled by default, may need to set
spring.main.allow-bean-definition-overriding=true
for test configurationsAUTH SERVICE ONLY - Spring Boot 2 does not use a plaintext password encoder anymore, but one that adds a encode prefix to each password; current workaround is to use the NoOpPasswordEncoder, but will probably need to use a real password encoder and migrate all passwords in the system
Pagination does not allow a null sort, and by default returns an object rather than an array, so add CustomSortSerializer to serialize Sort
Make sure
spring.flyway.table=schema_version
, newer versions of Flyway has a new default table nameSince JSON response has its Sort property modified, add JsonSortSerializer so integration tests will pass. It is also recommended to change PageImplRepresentation class which extends PageImpl to PageDto implementing Page interface
OpenLMIS: the global initiative for powerful LMIS software