Skip to content

Commit da872e5

Browse files
authored
Support Spring Boot 4.0 bootstrap context package relocation (#115)
1 parent 98b1f59 commit da872e5

File tree

9 files changed

+248
-33
lines changed

9 files changed

+248
-33
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ Apollo Java 2.5.0
99
* [Feature Provide a new open APl to return the organization list](https://github.com/apolloconfig/apollo-java/pull/102)
1010
* [Feature Added a new feature to get instance count by namespace.](https://github.com/apolloconfig/apollo-java/pull/103)
1111
* [Feature Support retry in open api client.](https://github.com/apolloconfig/apollo-java/pull/105)
12+
* [Support Spring Boot 4.0 bootstrap context package relocation for apollo-client-config-data](https://github.com/apolloconfig/apollo-java/pull/115)
1213

1314
------------------
1415
All issues and pull requests are [here](https://github.com/apolloconfig/apollo-java/milestone/5?closed=1)

apollo-client-config-data/src/main/java/com/ctrip/framework/apollo/config/data/extension/initialize/ApolloClientExtensionInitializeFactory.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import com.ctrip.framework.apollo.config.data.extension.websocket.ApolloClientWebsocketExtensionInitializer;
2424
import com.ctrip.framework.apollo.config.data.util.Slf4jLogMessageFormatter;
2525
import org.apache.commons.logging.Log;
26-
import org.springframework.boot.ConfigurableBootstrapContext;
2726
import org.springframework.boot.context.properties.bind.BindHandler;
2827
import org.springframework.boot.context.properties.bind.Binder;
2928
import org.springframework.boot.logging.DeferredLogFactory;
@@ -42,7 +41,7 @@ public class ApolloClientExtensionInitializeFactory {
4241
private final ApolloClientWebsocketExtensionInitializer apolloClientWebsocketExtensionInitializer;
4342

4443
public ApolloClientExtensionInitializeFactory(DeferredLogFactory logFactory,
45-
ConfigurableBootstrapContext bootstrapContext) {
44+
Object bootstrapContext) {
4645
this.log = logFactory.getLog(ApolloClientExtensionInitializeFactory.class);
4746
this.apolloClientPropertiesFactory = new ApolloClientPropertiesFactory();
4847
this.apolloClientLongPollingExtensionInitializer = new ApolloClientLongPollingExtensionInitializer(

apollo-client-config-data/src/main/java/com/ctrip/framework/apollo/config/data/extension/webclient/ApolloClientLongPollingExtensionInitializer.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import com.ctrip.framework.foundation.internals.ServiceBootstrap;
2525
import java.util.List;
2626
import org.apache.commons.logging.Log;
27-
import org.springframework.boot.ConfigurableBootstrapContext;
2827
import org.springframework.boot.context.properties.bind.BindHandler;
2928
import org.springframework.boot.context.properties.bind.Binder;
3029
import org.springframework.boot.logging.DeferredLogFactory;
@@ -40,10 +39,10 @@ public class ApolloClientLongPollingExtensionInitializer implements
4039

4140
private final Log log;
4241

43-
private final ConfigurableBootstrapContext bootstrapContext;
42+
private final Object bootstrapContext;
4443

4544
public ApolloClientLongPollingExtensionInitializer(DeferredLogFactory logFactory,
46-
ConfigurableBootstrapContext bootstrapContext) {
45+
Object bootstrapContext) {
4746
this.log = logFactory.getLog(ApolloClientLongPollingExtensionInitializer.class);
4847
this.bootstrapContext = bootstrapContext;
4948
}

apollo-client-config-data/src/main/java/com/ctrip/framework/apollo/config/data/extension/webclient/customizer/spi/ApolloClientWebClientCustomizerFactory.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import com.ctrip.framework.apollo.config.data.extension.properties.ApolloClientProperties;
2020
import com.ctrip.framework.apollo.core.spi.Ordered;
2121
import org.apache.commons.logging.Log;
22-
import org.springframework.boot.ConfigurableBootstrapContext;
2322
import org.springframework.boot.context.properties.bind.BindHandler;
2423
import org.springframework.boot.context.properties.bind.Binder;
2524
import org.springframework.boot.web.reactive.function.client.WebClientCustomizer;
@@ -37,11 +36,15 @@ public interface ApolloClientWebClientCustomizerFactory extends Ordered {
3736
* @param binder properties binder
3837
* @param bindHandler properties binder Handler
3938
* @param log deferred log
40-
* @param bootstrapContext bootstrapContext
39+
* @param bootstrapContext bootstrapContext (can be either
40+
* org.springframework.boot.ConfigurableBootstrapContext for
41+
* Spring Boot 3.x or
42+
* org.springframework.boot.bootstrap.ConfigurableBootstrapContext
43+
* for Spring Boot 4.x)
4144
* @return WebClientCustomizer instance or null
4245
*/
4346
@Nullable
4447
WebClientCustomizer createWebClientCustomizer(ApolloClientProperties apolloClientProperties,
4548
Binder binder, BindHandler bindHandler, Log log,
46-
ConfigurableBootstrapContext bootstrapContext);
49+
Object bootstrapContext);
4750
}

apollo-client-config-data/src/main/java/com/ctrip/framework/apollo/config/data/extension/websocket/ApolloClientWebsocketExtensionInitializer.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import com.ctrip.framework.apollo.config.data.extension.initialize.ApolloClientExtensionInitializer;
2020
import com.ctrip.framework.apollo.config.data.extension.properties.ApolloClientProperties;
2121
import org.apache.commons.logging.Log;
22-
import org.springframework.boot.ConfigurableBootstrapContext;
2322
import org.springframework.boot.context.properties.bind.BindHandler;
2423
import org.springframework.boot.context.properties.bind.Binder;
2524
import org.springframework.boot.logging.DeferredLogFactory;
@@ -31,10 +30,10 @@ public class ApolloClientWebsocketExtensionInitializer implements ApolloClientEx
3130

3231
private final Log log;
3332

34-
private final ConfigurableBootstrapContext bootstrapContext;
33+
private final Object bootstrapContext;
3534

3635
public ApolloClientWebsocketExtensionInitializer(DeferredLogFactory logFactory,
37-
ConfigurableBootstrapContext bootstrapContext) {
36+
Object bootstrapContext) {
3837
this.log = logFactory.getLog(ApolloClientWebsocketExtensionInitializer.class);
3938
this.bootstrapContext = bootstrapContext;
4039
}

apollo-client-config-data/src/main/java/com/ctrip/framework/apollo/config/data/importer/ApolloConfigDataLoader.java

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import com.ctrip.framework.apollo.Config;
2020
import com.ctrip.framework.apollo.ConfigService;
21+
import com.ctrip.framework.apollo.config.data.util.BootstrapRegistryHelper;
2122
import com.ctrip.framework.apollo.config.data.util.Slf4jLogMessageFormatter;
2223
import com.ctrip.framework.apollo.spring.config.ConfigPropertySource;
2324
import com.ctrip.framework.apollo.spring.config.ConfigPropertySourceFactory;
@@ -26,8 +27,6 @@
2627
import java.util.ArrayList;
2728
import java.util.List;
2829
import org.apache.commons.logging.Log;
29-
import org.springframework.boot.BootstrapRegistry.InstanceSupplier;
30-
import org.springframework.boot.ConfigurableBootstrapContext;
3130
import org.springframework.boot.context.config.ConfigData;
3231
import org.springframework.boot.context.config.ConfigDataLoader;
3332
import org.springframework.boot.context.config.ConfigDataLoaderContext;
@@ -55,22 +54,24 @@ public ApolloConfigDataLoader(DeferredLogFactory logFactory) {
5554
@Override
5655
public ConfigData load(ConfigDataLoaderContext context, ApolloConfigDataResource resource)
5756
throws IOException, ConfigDataResourceNotFoundException {
58-
ConfigurableBootstrapContext bootstrapContext = context.getBootstrapContext();
59-
Binder binder = bootstrapContext.get(Binder.class);
57+
Object bootstrapContext = BootstrapRegistryHelper.getBootstrapContext(context);
58+
Binder binder = BootstrapRegistryHelper.get(bootstrapContext, Binder.class);
6059
BindHandler bindHandler = this.getBindHandler(context);
61-
bootstrapContext.registerIfAbsent(ApolloConfigDataLoaderInitializer.class, InstanceSupplier
62-
.from(() -> new ApolloConfigDataLoaderInitializer(this.logFactory, binder, bindHandler,
63-
bootstrapContext)));
64-
ApolloConfigDataLoaderInitializer apolloConfigDataLoaderInitializer = bootstrapContext
65-
.get(ApolloConfigDataLoaderInitializer.class);
60+
BootstrapRegistryHelper.registerIfAbsentFromSupplier(bootstrapContext,
61+
ApolloConfigDataLoaderInitializer.class,
62+
() -> new ApolloConfigDataLoaderInitializer(this.logFactory, binder, bindHandler,
63+
bootstrapContext));
64+
ApolloConfigDataLoaderInitializer apolloConfigDataLoaderInitializer =
65+
BootstrapRegistryHelper.get(bootstrapContext, ApolloConfigDataLoaderInitializer.class);
6666
// init apollo client
6767
List<PropertySource<?>> initialPropertySourceList = apolloConfigDataLoaderInitializer
6868
.initApolloClient();
6969
// load config
70-
bootstrapContext.registerIfAbsent(ConfigPropertySourceFactory.class,
71-
InstanceSupplier.from(() -> SpringInjector.getInstance(ConfigPropertySourceFactory.class)));
72-
ConfigPropertySourceFactory configPropertySourceFactory = bootstrapContext
73-
.get(ConfigPropertySourceFactory.class);
70+
BootstrapRegistryHelper.registerIfAbsentFromSupplier(bootstrapContext,
71+
ConfigPropertySourceFactory.class,
72+
() -> SpringInjector.getInstance(ConfigPropertySourceFactory.class));
73+
ConfigPropertySourceFactory configPropertySourceFactory =
74+
BootstrapRegistryHelper.get(bootstrapContext, ConfigPropertySourceFactory.class);
7475
String namespace = resource.getNamespace();
7576
Config config = ConfigService.getConfig(namespace);
7677
ConfigPropertySource configPropertySource = configPropertySourceFactory
@@ -83,7 +84,8 @@ public ConfigData load(ConfigDataLoaderContext context, ApolloConfigDataResource
8384
}
8485

8586
private BindHandler getBindHandler(ConfigDataLoaderContext context) {
86-
return context.getBootstrapContext().getOrElse(BindHandler.class, null);
87+
Object bootstrapContext = BootstrapRegistryHelper.getBootstrapContext(context);
88+
return BootstrapRegistryHelper.getOrElse(bootstrapContext, BindHandler.class, null);
8789
}
8890

8991
@Override

apollo-client-config-data/src/main/java/com/ctrip/framework/apollo/config/data/importer/ApolloConfigDataLoaderInitializer.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import java.util.List;
3131
import java.util.Map;
3232
import org.apache.commons.logging.Log;
33-
import org.springframework.boot.ConfigurableBootstrapContext;
3433
import org.springframework.boot.context.properties.bind.BindHandler;
3534
import org.springframework.boot.context.properties.bind.Bindable;
3635
import org.springframework.boot.context.properties.bind.Binder;
@@ -54,11 +53,11 @@ class ApolloConfigDataLoaderInitializer {
5453

5554
private final BindHandler bindHandler;
5655

57-
private final ConfigurableBootstrapContext bootstrapContext;
56+
private final Object bootstrapContext;
5857

5958
public ApolloConfigDataLoaderInitializer(DeferredLogFactory logFactory,
6059
Binder binder, BindHandler bindHandler,
61-
ConfigurableBootstrapContext bootstrapContext) {
60+
Object bootstrapContext) {
6261
this.logFactory = logFactory;
6362
this.log = logFactory.getLog(ApolloConfigDataLoaderInitializer.class);
6463
this.binder = binder;

apollo-client-config-data/src/main/java/com/ctrip/framework/apollo/config/data/listener/ApolloSpringApplicationRegisterListener.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@
1616
*/
1717
package com.ctrip.framework.apollo.config.data.listener;
1818

19-
import org.springframework.boot.BootstrapRegistry.InstanceSupplier;
20-
import org.springframework.boot.ConfigurableBootstrapContext;
19+
import com.ctrip.framework.apollo.config.data.util.BootstrapRegistryHelper;
2120
import org.springframework.boot.SpringApplication;
2221
import org.springframework.boot.context.event.ApplicationStartingEvent;
2322
import org.springframework.context.ApplicationListener;
@@ -30,8 +29,8 @@ public class ApolloSpringApplicationRegisterListener implements
3029

3130
@Override
3231
public void onApplicationEvent(ApplicationStartingEvent event) {
33-
ConfigurableBootstrapContext bootstrapContext = event.getBootstrapContext();
34-
bootstrapContext.registerIfAbsent(SpringApplication.class,
35-
InstanceSupplier.of(event.getSpringApplication()));
32+
Object bootstrapContext = BootstrapRegistryHelper.getBootstrapContext(event);
33+
BootstrapRegistryHelper.registerIfAbsent(bootstrapContext, SpringApplication.class,
34+
event.getSpringApplication());
3635
}
3736
}

0 commit comments

Comments
 (0)