Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit083110c

Browse files
committed
fix: reload router functions when a plugin adds endpoints
1 parentea9d6fc commit083110c

File tree

4 files changed

+70
-6
lines changed

4 files changed

+70
-6
lines changed

‎.gitignore‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ client/.yarn/cache/*.zip
55
server/node-service/.yarn/cache/*.zip
66
.metadata/
77
.DS_Store
8+
application-dev.yml
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
packageorg.lowcoder.api.framework.configuration;
2+
3+
importorg.lowcoder.api.framework.plugin.endpoint.ReloadableRouterFunctionMapping;
4+
importorg.springframework.context.annotation.Configuration;
5+
importorg.springframework.web.reactive.config.WebFluxConfigurationSupport;
6+
importorg.springframework.web.reactive.function.server.support.RouterFunctionMapping;
7+
8+
@Configuration
9+
publicclassCustomWebFluxConfigurationSupportextendsWebFluxConfigurationSupport
10+
{
11+
@Override
12+
protectedRouterFunctionMappingcreateRouterFunctionMapping()
13+
{
14+
returnnewReloadableRouterFunctionMapping();
15+
}
16+
17+
}

‎server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/plugin/endpoint/PluginEndpointHandlerImpl.java‎

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,32 @@
2121
importorg.lowcoder.plugin.api.data.EndpointRequest;
2222
importorg.lowcoder.plugin.api.data.EndpointResponse;
2323
importorg.lowcoder.sdk.exception.BaseException;
24+
importorg.springframework.context.ApplicationContext;
25+
importorg.springframework.context.support.GenericApplicationContext;
2426
importorg.springframework.core.ResolvableType;
2527
importorg.springframework.http.ResponseCookie;
2628
importorg.springframework.stereotype.Component;
2729
importorg.springframework.web.reactive.function.server.RequestPredicate;
2830
importorg.springframework.web.reactive.function.server.RouterFunction;
2931
importorg.springframework.web.reactive.function.server.ServerResponse;
3032
importorg.springframework.web.reactive.function.server.ServerResponse.BodyBuilder;
33+
importorg.springframework.web.reactive.function.server.support.RouterFunctionMapping;
3134

35+
importlombok.RequiredArgsConstructor;
3236
importlombok.extern.slf4j.Slf4j;
3337
importreactor.core.publisher.Mono;
3438

3539
@Slf4j
40+
@RequiredArgsConstructor
3641
@Component
3742
publicclassPluginEndpointHandlerImplimplementsPluginEndpointHandler
3843
{
3944
privatestaticfinalStringPLUGINS_BASE_URL ="/plugins/";
4045
privateList<RouterFunction<ServerResponse>>routes =newArrayList<>();
41-
46+
47+
privatefinalApplicationContextapplicationContext;
48+
privatefinalRouterFunctionMappingrouterFunctionMapping;
49+
4250
@Override
4351
publicvoidregisterEndpoints(StringpluginUrlPrefix,List<PluginEndpoint>endpoints)
4452
{
@@ -57,7 +65,9 @@ public void registerEndpoints(String pluginUrlPrefix, List<PluginEndpoint> endpo
5765
registerEndpointHandler(urlPrefix,endpoint,handler);
5866
}
5967
}
60-
}
68+
}
69+
70+
((ReloadableRouterFunctionMapping)routerFunctionMapping).reloadFunctionMappings();
6171
}
6272
}
6373

@@ -74,8 +84,10 @@ private void registerEndpointHandler(String urlPrefix, PluginEndpoint endpoint,
7484
if (checkHandlerMethod(handler))
7585
{
7686

77-
EndpointExtensionendpointMeta =handler.getAnnotation(EndpointExtension.class);
78-
routes.add(route(createRequestPredicate(urlPrefix,endpointMeta),req -> {
87+
EndpointExtensionendpointMeta =handler.getAnnotation(EndpointExtension.class);
88+
StringendpointName =endpoint.getClass().getSimpleName() +"_" +handler.getName();
89+
90+
RouterFunction<ServerResponse>routerFunction =route(createRequestPredicate(urlPrefix,endpointMeta),req -> {
7991
Mono<ServerResponse>result =null;
8092
try
8193
{
@@ -87,8 +99,10 @@ private void registerEndpointHandler(String urlPrefix, PluginEndpoint endpoint,
8799
thrownewBaseException("Error running handler for [ " +endpointMeta.method() +": " +endpointMeta.uri() +"] !");
88100
}
89101
returnresult;
90-
})
91-
);
102+
});
103+
routes.add(routerFunction);
104+
registerRouterFunctionMapping(endpointName,routerFunction);
105+
92106
log.info("Registered endpoint: {} -> {}: {}",endpoint.getClass().getSimpleName(),endpointMeta.method(),urlPrefix +endpointMeta.uri());
93107
}
94108
else
@@ -98,6 +112,18 @@ private void registerEndpointHandler(String urlPrefix, PluginEndpoint endpoint,
98112
}
99113
}
100114

115+
privatevoidregisterRouterFunctionMapping(StringendpointName,RouterFunction<ServerResponse>routerFunction)
116+
{
117+
StringbeanName ="pluginEndpoint_" +endpointName +"_" +System.currentTimeMillis();
118+
119+
((GenericApplicationContext)applicationContext).registerBean(beanName,RouterFunction.class, () -> {
120+
returnrouterFunction;
121+
});
122+
123+
log.debug("Registering RouterFunction bean definition: {}",beanName);
124+
}
125+
126+
101127
privateMono<ServerResponse>createServerResponse(EndpointResponsepluginResponse)
102128
{
103129
/** Create response with given status **/
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
packageorg.lowcoder.api.framework.plugin.endpoint;
2+
3+
importorg.springframework.web.reactive.function.server.RouterFunctions;
4+
importorg.springframework.web.reactive.function.server.support.RouterFunctionMapping;
5+
6+
7+
publicclassReloadableRouterFunctionMappingextendsRouterFunctionMapping
8+
{
9+
/**
10+
* Rescan application context for RouterFunction beans
11+
*/
12+
publicvoidreloadFunctionMappings()
13+
{
14+
initRouterFunctions();
15+
if (getRouterFunction() !=null)
16+
{
17+
RouterFunctions.changeParser(getRouterFunction(),getPathPatternParser());
18+
}
19+
}
20+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp