Skip to content

Commit c009579

Browse files
ashakirinsanagaraj-pivotal
authored andcommitted
Support ugrading applications to 3.0 using boot bom (#267)
Co-authored-by: sanagaraj-pivotal <[email protected]>
1 parent 03cc93b commit c009579

File tree

10 files changed

+324
-74
lines changed

10 files changed

+324
-74
lines changed

applications/spring-shell/src/test/java/org/springframework/sbm/BootUpgrade_27_30_IntegrationTest.java

Lines changed: 74 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ private void verifyCrudRepoAddition() {
5959
import org.springframework.data.repository.CrudRepository;
6060
import org.springframework.data.repository.PagingAndSortingRepository;
6161
62-
public interface StudentRepo extends PagingAndSortingRepository<Student<?>, Long>, CrudRepository<Student<?>, Long> {
62+
public interface StudentRepo extends PagingAndSortingRepository<Student, Long>, CrudRepository<Student, Long> {
6363
}
6464
""");
6565
}
@@ -98,41 +98,45 @@ private void verifyYamlConfigurationUpdate() {
9898
String micrometerClass = loadFile(Path.of("src/main/resources/application.yaml"));
9999
assertThat(micrometerClass).isEqualTo(
100100
"spring:\n" +
101-
" elasticsearch:\n" +
102-
" connection-timeout: '1'\n" +
103-
" password: testpassword\n" +
104-
" socket-timeout: '2'\n" +
105-
" restclient.sniffer.delay-after-failure: '3'\n" +
106-
" restclient.sniffer.interval: '4'\n" +
107-
" username: username\n" +
108-
" security:\n" +
109-
" saml2:\n" +
110-
" relyingparty:\n" +
111-
" registration:\n" +
112-
" idpone:\n" +
113-
" assertingparty:\n" +
114-
" verification:\n" +
115-
" credentials:\n" +
116-
" certificate-location: classpath:saml/idpone.crt\n" +
117-
" entity-id: https://idpone.com\n" +
118-
" sso-url: https://idpone.com\n" +
119-
" elasticsearch.connection-timeout: '1000'\n" +
120-
" elasticsearch.webclient.max-in-memory-size: '122'\n" +
121-
" elasticsearch.password: abc\n" +
122-
" elasticsearch.socket-timeout: '100'\n" +
123-
" elasticsearch.username: testUser\n" +
124-
" sql.init.data-locations: testdata\n" +
125-
" sql.init.password: password\n" +
126-
" sql.init.username: username-data\n" +
127-
" sql.init.mode: mode1\n" +
128-
" sql.init.platform: pls\n" +
129-
" sql.init.schema-locations: table1\n" +
130-
" sql.init.password: password2\n" +
131-
" sql.init.username: username-schema\n" +
132-
" sql.init.separator: k\n" +
133-
" sql.init.encoding: UTF-8\n" +
134-
"server.reactive.session.cookie.same-site: 'true'" +
135-
"\n");
101+
" datasource:\n" +
102+
" url: jdbc:h2:mem:testdb\n" +
103+
" driverClassName: org.h2.Driver\n" +
104+
" jpa:\n" +
105+
" database-platform: org.hibernate.dialect.H2Dialect\n" +
106+
" elasticsearch:\n" +
107+
" connection-timeout: '1'\n" +
108+
" password: testpassword\n" +
109+
" socket-timeout: '2'\n" +
110+
" restclient.sniffer.delay-after-failure: '3'\n" +
111+
" restclient.sniffer.interval: '4'\n" +
112+
" username: username\n" +
113+
" security:\n" +
114+
" saml2:\n" +
115+
" relyingparty:\n" +
116+
" registration:\n" +
117+
" idpone:\n" +
118+
" assertingparty:\n" +
119+
" verification:\n" +
120+
" credentials:\n" +
121+
" certificate-location: classpath:saml/idpone.crt\n" +
122+
" entity-id: https://idpone.com\n" +
123+
" sso-url: https://idpone.com\n" +
124+
" elasticsearch.connection-timeout: '1000'\n" +
125+
" elasticsearch.webclient.max-in-memory-size: '122'\n" +
126+
" elasticsearch.password: abc\n" +
127+
" elasticsearch.socket-timeout: '100'\n" +
128+
" elasticsearch.username: testUser\n" +
129+
" sql.init.data-locations: testdata\n" +
130+
" sql.init.password: password\n" +
131+
" sql.init.username: sa\n" +
132+
" sql.init.mode: mode1\n" +
133+
" sql.init.platform: pls\n" +
134+
" sql.init.schema-locations: table1\n" +
135+
" sql.init.password: password\n" +
136+
" sql.init.username: sa\n" +
137+
" sql.init.separator: k\n" +
138+
" sql.init.encoding: UTF-8\n" +
139+
"server.reactive.session.cookie.same-site: 'true'\n");
136140
}
137141

138142

@@ -141,34 +145,40 @@ private void verifyPropertyConfigurationUpdate() {
141145
String applicationProperties = loadFile(Path.of("src/main/resources/application.properties"));
142146
assertThat(applicationProperties).isEqualTo(
143147
"spring.elasticsearch.connection-timeout=1000\n" +
144-
"spring.elasticsearch.webclient.max-in-memory-size=122\n" +
145-
"spring.elasticsearch.password=abc\n" +
146-
"spring.elasticsearch.socket-timeout=100\n" +
147-
"spring.elasticsearch.username=testUser\n" +
148-
"\n" +
149-
"spring.sql.init.data-locations=testdata\n" +
150-
"spring.sql.init.password=password\n" +
151-
"spring.sql.init.username=username\n" +
152-
"spring.sql.init.mode=mode1\n" +
153-
"spring.sql.init.platform=pls\n" +
154-
"spring.sql.init.schema-locations=table1\n" +
155-
"spring.sql.init.password=password2\n" +
156-
"spring.sql.init.username=username2\n" +
157-
"spring.sql.init.separator=k\n" +
158-
"spring.sql.init.encoding=UTF-8\n" +
159-
"\n" +
160-
"spring.elasticsearch.connection-timeout=1\n" +
161-
"spring.elasticsearch.password=testpassword\n" +
162-
"spring.elasticsearch.socket-timeout=2\n" +
163-
"spring.elasticsearch.restclient.sniffer.delay-after-failure=3\n" +
164-
"spring.elasticsearch.restclient.sniffer.interval=4\n" +
165-
"spring.elasticsearch.username=username\n" +
166-
"\n" +
167-
"spring.security.saml2.relyingparty.registration.idpone.assertingparty.entity-id=https://idpone.com\n" +
168-
"spring.security.saml2.relyingparty.registration.idpone.assertingparty.sso-url=https://idpone.com\n" +
169-
"spring.security.saml2.relyingparty.registration.idpone.assertingparty.verification.credentials.certificate-location=classpath:saml/idpone.crt\n" +
170-
"\n" +
171-
"server.reactive.session.cookie.same-site=true\n");
148+
"spring.elasticsearch.webclient.max-in-memory-size=122\n" +
149+
"spring.elasticsearch.password=abc\n" +
150+
"spring.elasticsearch.socket-timeout=100\n" +
151+
"spring.elasticsearch.username=testUser\n" +
152+
"\n" +
153+
"spring.sql.init.data-locations=testdata\n" +
154+
"spring.sql.init.password=password\n" +
155+
"spring.sql.init.username=username\n" +
156+
"spring.sql.init.mode=mode1\n" +
157+
"spring.sql.init.platform=pls\n" +
158+
"spring.sql.init.schema-locations=table1\n" +
159+
"spring.sql.init.password=password2\n" +
160+
"spring.sql.init.username=username2\n" +
161+
"spring.sql.init.separator=k\n" +
162+
"spring.sql.init.encoding=UTF-8\n" +
163+
"\n" +
164+
"spring.elasticsearch.connection-timeout=1\n" +
165+
"spring.elasticsearch.password=testpassword\n" +
166+
"spring.elasticsearch.socket-timeout=2\n" +
167+
"spring.elasticsearch.restclient.sniffer.delay-after-failure=3\n" +
168+
"spring.elasticsearch.restclient.sniffer.interval=4\n" +
169+
"spring.elasticsearch.username=username\n" +
170+
"\n" +
171+
"spring.security.saml2.relyingparty.registration.idpone.assertingparty.entity-id=https://idpone.com\n" +
172+
"spring.security.saml2.relyingparty.registration.idpone.assertingparty.sso-url=https://idpone.com\n" +
173+
"spring.security.saml2.relyingparty.registration.idpone.assertingparty.verification.credentials.certificate-location=classpath:saml/idpone.crt\n" +
174+
"\n" +
175+
"server.reactive.session.cookie.same-site=true\n" +
176+
"\n" +
177+
"spring.datasource.url=jdbc:h2:mem:testdb\n" +
178+
"spring.datasource.driverClassName=org.h2.Driver\n" +
179+
"spring.datasource.username=sa\n" +
180+
"spring.datasource.password=password\n" +
181+
"spring.jpa.database-platform=org.hibernate.dialect.H2Dialect\n");
172182
}
173183

174184
private void verifyParentPomVersion() {

applications/spring-shell/src/test/resources/testcode/boot-migration-27-30/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
<properties>
1717
<java.version>17</java.version>
1818
</properties>
19+
1920
<dependencies>
2021
<dependency>
2122
<groupId>org.springframework.boot</groupId>
@@ -29,6 +30,11 @@
2930
<groupId>org.springframework.boot</groupId>
3031
<artifactId>spring-boot-starter-data-jpa</artifactId>
3132
</dependency>
33+
<dependency>
34+
<groupId>com.h2database</groupId>
35+
<artifactId>h2</artifactId>
36+
<scope>runtime</scope>
37+
</dependency>
3238
<dependency>
3339
<groupId>org.springframework.boot</groupId>
3440
<artifactId>spring-boot-starter-test</artifactId>
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
package org.springboot.example.upgrade;
22

3-
public class Student<T> {
4-
private T name;
3+
import javax.persistence.Entity;
4+
import javax.persistence.Id;
5+
6+
@Entity
7+
public class Student {
8+
@Id
9+
private long id;
10+
private String name;
511
}

applications/spring-shell/src/test/resources/testcode/boot-migration-27-30/src/main/java/org/springboot/example/upgrade/StudentRepo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22

33
import org.springframework.data.repository.PagingAndSortingRepository;
44

5-
public interface StudentRepo extends PagingAndSortingRepository<Student<?>, Long> {
5+
public interface StudentRepo extends PagingAndSortingRepository<Student, Long> {
66
}

applications/spring-shell/src/test/resources/testcode/boot-migration-27-30/src/main/resources/application.properties

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,9 @@ spring.graphql.cors.allowed-headers=hello
7878
spring.graphql.cors.allow-credentials=true
7979

8080
spring.h2.console.enabled=true
81-
spring.h2.console.path="/tmp"
81+
spring.h2.console.path=/tmp
8282
spring.h2.console.settings.trace=true
83-
spring.h2.console.settings.web-admin-password="password"
83+
spring.h2.console.settings.web-admin-password=password
8484
spring.h2.console.settings.web-allow-others=true
8585

8686
spring.jersey.type=type1
@@ -113,3 +113,9 @@ spring.security.saml2.relyingparty.registration.idpone.identityprovider.sso-url=
113113
spring.security.saml2.relyingparty.registration.idpone.identityprovider.verification.credentials.certificate-location=classpath:saml/idpone.crt
114114

115115
spring.webflux.session.cookie.same-site=true
116+
117+
spring.datasource.url=jdbc:h2:mem:testdb
118+
spring.datasource.driverClassName=org.h2.Driver
119+
spring.datasource.username=sa
120+
spring.datasource.password=password
121+
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

applications/spring-shell/src/test/resources/testcode/boot-migration-27-30/src/main/resources/application.yaml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
spring:
22
datasource:
33
data: testdata
4-
data-username: username-data
5-
schema-username: username-schema
6-
schema-password: password2
4+
url: jdbc:h2:mem:testdb
5+
data-username: sa
6+
schema-username: sa
7+
schema-password: password
8+
driverClassName: org.h2.Driver
79
schema: table1
810
initialization-mode: mode1
911
data-password: password
1012
sql-script-encoding: UTF-8
1113
platform: pls
1214
separator: k
15+
jpa:
16+
database-platform: org.hibernate.dialect.H2Dialect
1317
activemq:
1418
pool:
1519
max-sessions-per-connection: '300'
@@ -83,9 +87,9 @@ spring:
8387
username: testUser
8488
h2:
8589
console:
86-
path: '"/tmp"'
90+
path: "/tmp"
8791
settings:
88-
web-admin-password: '"password"'
92+
web-admin-password: "password"
8993
web-allow-others: 'true'
9094
trace: 'true'
9195
enabled: 'true'

components/sbm-core/src/test/java/org/springframework/sbm/engine/precondition/PreconditionVerifierIntegrationTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import org.eclipse.jgit.api.Git;
1919
import org.jetbrains.annotations.NotNull;
20+
import org.junit.jupiter.api.Disabled;
2021
import org.junit.jupiter.api.Test;
2122
import org.junit.jupiter.api.io.TempDir;
2223
import org.springframework.beans.factory.annotation.Autowired;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.springframework.sbm.boot.upgrade_27_30;
2+
3+
import org.openrewrite.Recipe;
4+
5+
public class UpgradeBomVersion27_30 extends Recipe {
6+
@Override
7+
public String getDisplayName() {
8+
return "UpgradeBomVersion27_30";
9+
}
10+
}

components/sbm-recipes-boot-upgrade/src/main/resources/recipes/boot-2.7-3.0-dependency-version-update.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
type: org.springframework.sbm.boot.upgrade.common.conditions.HasSpringBootParentOfVersion
2828
versionStartingWith: "2.7."
2929
description: Add Spring Milestone Repository and bump parent pom to 3.0.0-M3
30+
3031
openRewriteRecipe: |-
3132
type: specs.openrewrite.org/v1beta/recipe
3233
name: org.openrewrite.java.spring.boot3.data.UpgradeSpringData30
@@ -37,6 +38,10 @@
3738
groupId: org.springframework.boot
3839
artifactId: spring-boot-starter-parent
3940
newVersion: 3.0.0-M3
41+
- org.openrewrite.maven.UpgradeDependencyVersion:
42+
groupId: org.springframework.boot
43+
artifactId: spring-boot-dependencies
44+
newVersion: 3.0.0-M3
4045
4146
- type: org.springframework.sbm.engine.recipe.OpenRewriteDeclarativeRecipeAdapter
4247
condition:

0 commit comments

Comments
 (0)