Spring Boot
Introduction
The Spring Framework is an application framework and inversion of control container for the Java platform.
Spring Boot Architecture
https://dev.to/maddy/spring-boot-architecture-547i
Compatibility matrix
Reference (single page), for specific version replace "current", eg by "2.6.0-M2" :
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
-For 'JDK' version, search "requires Java" text in section "System requirements"
-For 'Spring' version, search for "Spring Framework" text in section "System requirements"
-For 'Maven' version, search for "Maven" build tool in section "System requirements"
Spring Boot | Spring | JDK | Maven
3.1.5 | 6.0.13+ |[17,21]| 3.6.3+
3.1.4 | 6.0.12+ |[17,20]| 3.6.3+
3.0.0 | 6.0.2+ |[17,19]| 3.5+
2.7.4 | 5.3.23+ |[ 8,19]| 3.5+
2.5.5 | 5.3.10+ |[ 8,17]| 3.5+
2.5.4 | 5.3.9+ |[ 8,16]| 3.5+
2.4.3 | 5.3.4+ |[ 8,15]| 3.3+
2.1.18.RELEASE | 5.1.19.RELEASE+ |[ 8,12]| 3.3+
2.0.9.RELEASE | 5.0.13.RELEASE+ |[ 8, 9]| 3.2+
1.5.22.RELEASE | 4.3.25.RELEASE+ |[ 6, 8]| 3.2+
jakarta vs javax
Only javax usage inside Jakarta EE is affected by modification restrictions. Several javax package exist outside Jakarta EE and are therefore in no way affected.
-Use v3 of spring-boot-starter-parent
Known changes (jakarta replaced javax)
jakarta.validation javax.validation
jakarta.inject javax.inject
Remove dependency javax.inject:javax.inject
Add dependency jakarta.inject:jakarta.inject-api
jakarta.persistence javax.persistence
jakarta.annotation.PreDestroy javax.annotation.PreDestroy
jakarta.servlet.* javax.servlet.*
jakarta.transaction.Transactional javax.transaction.Transactional
jakarta.xml.ws.BindingProvider javax.xml.ws.BindingProvider
Doesn't change (javax only)
javax.accessibility
javax.activity
javax.annotation.processing
javax.crypto
javax.crypto.interfaces
javax.crypto.spec
javax.help
javax.help.event
javax.help.plaf
javax.help.plaf.basic
javax.help.plaf.gtk
javax.help.resources
javax.help.search
javax.imageio
javax.imageio.event
javax.imageio.metadata
javax.imageio.plugins.bmp
javax.imageio.plugins.jpeg
javax.imageio.plugins.tiff
javax.imageio.spi
javax.imageio.stream
javax.jnlp
javax.lang.model
javax.lang.model.element
javax.lang.model.type
javax.lang.model.util
javax.management
javax.management.loading
javax.management.modelmbean
javax.management.monitor
javax.management.openmbean
javax.management.relation
javax.management.remote
javax.management.remote.rmi
javax.management.timer
javax.naming
javax.naming.directory
javax.naming.event
javax.naming.ldap
javax.naming.spi
javax.net
javax.net.ssl
javax.print
javax.print.attribute
javax.print.attribute.standard
javax.print.event
javax.rmi
javax.rmi.CORBA
javax.rmi.ssl
javax.script
javax.security.auth
javax.security.auth.callback
javax.security.auth.kerberos
javax.security.auth.login
javax.security.auth.spi
javax.security.auth.x500
javax.security.cert
javax.security.sasl
javax.smartcardio
javax.sound.midi
javax.sound.midi.spi
javax.sound.sampled
javax.sound.sampled.spi
javax.sql
javax.sql.rowset
javax.sql.rowset.serial
javax.sql.rowset.spi
javax.swing
javax.swing.beaninfo.images
javax.swing.border
javax.swing.colorchooser
javax.swing.event
javax.swing.filechooser
javax.swing.plaf
javax.swing.plaf.basic
javax.swing.plaf.metal
javax.swing.plaf.multi
javax.swing.plaf.nimbus
javax.swing.plaf.synth
javax.swing.table
javax.swing.text
javax.swing.text.html
javax.swing.text.html.parser
javax.swing.text.rtf
javax.swing.tree
javax.swing.undo
javax.tools
javax.transaction.xa (but jakarta.transaction.Transactional)
javax.xml (but jakarta.xml.ws.BindingProvider)
javax.xml.catalog
javax.xml.crypto
javax.xml.crypto.dom
javax.xml.crypto.dsig
javax.xml.crypto.dsig.dom
javax.xml.crypto.dsig.keyinfo
javax.xml.crypto.dsig.spec
javax.xml.datatype
javax.xml.namespace
javax.xml.parsers
javax.xml.stream
javax.xml.stream.events
javax.xml.stream.util
javax.xml.transform
javax.xml.transform.dom
javax.xml.transform.sax
javax.xml.transform.stax
javax.xml.transform.stream
javax.xml.validation
javax.xml.xpath
Spring Boot 3 (upgrade to)
-Use v3 of spring-boot-starter-parent
-Remove dependency javax.persistence:javax.persistence-api
-Remove dependency javax.xml.bind:jaxb-api
-Remove dependency org.glassfish.jaxb:jaxb-runtime (previously used by goal sonar:sonar)
-Exclude jaxb-api from dependency liquibase-core:
<exclusions>
<exclusion>
<!-- sb3. Now using jakarta only -->
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</exclusion>
</exclusions>
-Property jaxws-ri-version
<jaxws-ri-version>4.0.0<!--sb3 2.3.5--></jaxws-ri-version>
-wsimport dependencies:
<!--sb3 jakarta (wsimport) -->
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-tools</artifactId>
<version>4.0.0</version>
</dependency>
<!--sb3 jakarta (wsimport) -->
<dependency>
<groupId>jakarta.xml.ws</groupId>
<artifactId>jakarta.xml.ws-api</artifactId>
<!--version>4.0.0</version-->
</dependency>
<!--sb3 jakarta (wsimport) -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<!--version>4.0.0</version-->
</dependency>
<!--sb3 jakarta (wsimport) -->
<dependency>
<groupId>jakarta.activation</groupId>
<artifactId>jakarta.activation-api</artifactId>
<!--version>2.1.0</version-->
</dependency>
<!--sb3 jakarta (wsimport) -->
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>4.0.0</version>
</dependency>
-Remove, if not needed dependency "spring-webflux" (reactive-stack web framework)
-Upgrade version of swagger-parser:
<!-- (sb3) Swagger v3 annotations (springdoc & openapi-generator) -->
<dependency>
<groupId>io.swagger.parser.v3</groupId>
<artifactId>swagger-parser</artifactId>
<version>2.1.9</version>
</dependency>
-Dependency com.sun.xml.ws:jaxws-maven-plugin bumped to 4.0.0.
Changes to the dependencies subsection of jaxws-maven-plugin:
<!--sb3 jakarta (wsimport) -->
<dependency>
<groupId>jakarta.xml.ws</groupId>
<artifactId>jakarta.xml.ws-api</artifactId>
<version>4.0.0</version>
</dependency>
<!--sb3 jakarta (wsimport) -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>4.0.0</version>
</dependency>
<!--sb3 jakarta (wsimport) -->
<dependency>
<groupId>jakarta.activation</groupId>
<artifactId>jakarta.activation-api</artifactId>
<version>2.1.0</version>
</dependency>
<!--sb3 jakarta (wsimport) -->
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>4.0.0</version>
</dependency>
<!-- (sb3 removed) put the XJC plugins on the jaxws-maven-plugin's classpath
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>1.11.1</version>
</dependency>
-->
<!--sb3 [put the XJC plugins on the jaxws-maven-plugin's classpath] instead of org.jvnet.jaxb2_commons:jaxb2-basics-->
<dependency>
<groupId>com.evolvedbinary.maven.jvnet</groupId>
<artifactId>jaxb30-maven-plugin</artifactId>
<version>0.15.0</version>
</dependency>
<!-- (sb3) put XJC value constructor plugin classpath -->
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-value-constructor</artifactId>
<version>3.0</version>
</dependency>
Changes to the configuration/xjcArgs subsection of jaxws-maven-plugin:
<!--(sb3)<xjcArg>-XtoString</xjcArg>-->
-Replace maven-compiler-plugin configuration/annotationProcessorPaths/path 'org.hibernate':
<!--sb3 added .orm-->
<path>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>${hibernate.version}</version>
</path>
-Springdoc property
<springdoc-openapi.version>2.0.0<!--(sb3)Fails w/ [2.0.1 .. 2.0.2]--></springdoc-openapi.version>
-Springdoc dependencies, replace the v1 by the v2 ones:
<!-- [Swagger-UI] For spring-boot v3 support, make sure you use springdoc-openapi v2 -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>${springdoc-openapi.version}</version>
</dependency>
<!-- [Swagger-UI] Supports spring-data-rest, spring-security and javadoc -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-common</artifactId>
<version>${springdoc-openapi.version}</version>
</dependency>
-Springoc import import org.springdoc.core.GroupedOpenApi replaced by:
import org.springdoc.core.models.GroupedOpenApi;
-jakarta.validation replaces import javax.validation
-javax.inject replaces import javax.inject:
Remove dependency javax.inject:javax.inject
Add dependency jakarta.inject:jakarta.inject-api
-jakarta.persistence replaces import javax.persistence
-jakarta.annotation.PreDestroy replaces import javax.annotation.PreDestroy
-jakarta.servlet.* replaces javax.servlet.*
-jakarta.transaction.Transactional replaces import javax.transaction.Transactional
-jakarta.xml.ws.BindingProvider replaces import javax.xml.ws.BindingProvider
-If using 'openapi-generator-maven-plugin' then:
Activate flag 'openapi-generator-maven-plugin' for the flag to generate jakarta instead of javax [https://sites.google.com/site/pawneecity/sprint-boot/client-rest-with-maven-spring-boot/openapi-generator-maven-plugin-client-rest]
And add to pom.xml dependency for compiling '@javax.annotation.Generated':
Note: For Client generated code, it can be avoided using also <useJakartaEe>true</useJakartaEe>
<!-- Needed for compiling openapi @javax.annotation.Generated even if using 'useSpringBoot3' (sb3) -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
-src/main/resources/jaxws
Modify for jakarta according to [https://sites.google.com/site/pawneecity/sprint-boot/client-soap-with-maven-spring-boot]
-If using spring security, modify the SecurityFilterChain
-If using @EnableGlobalMethodSecurity, replace it by @Configuration @EnableMethodSecurity
For role hierarchy, see [https://sites.google.com/site/pawneecity/sprint-boot/authorization-custom-spring-boot#h.p_36V053clnF-w]