允许覆盖应用接口
This commit is contained in:
parent
77d403e123
commit
72bda060e6
@ -361,7 +361,7 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public RequestMagicDynamicRegistry magicRequestMagicDynamicRegistry(ApiInfoMagicResourceStorage apiInfoMagicResourceStorage) throws NoSuchMethodException {
|
||||
return new RequestMagicDynamicRegistry(apiInfoMagicResourceStorage, Mapping.create(requestMappingHandlerMapping, properties.getWeb(), properties.getPrefix()));
|
||||
return new RequestMagicDynamicRegistry(apiInfoMagicResourceStorage, Mapping.create(requestMappingHandlerMapping, properties.getWeb(), properties.getPrefix()), properties.isAllowOverride());
|
||||
}
|
||||
|
||||
@Bean
|
||||
|
||||
@ -39,6 +39,8 @@ public interface JsonCodeConstants {
|
||||
|
||||
JsonCode FUNCTION_PATH_REQUIRED = new JsonCode(0, "函数路径不能为空");
|
||||
|
||||
JsonCode REQUEST_PATH_CONFLICT = new JsonCode(0, "接口[{}({})]与应用冲突,无法注册");
|
||||
|
||||
JsonCode SCRIPT_REQUIRED = new JsonCode(0, "脚本内容不能为空");
|
||||
|
||||
JsonCode NAME_REQUIRED = new JsonCode(0, "名称不能为空");
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
package org.ssssssss.magicapi.service.impl;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.boot.context.properties.bind.Bindable;
|
||||
import org.springframework.boot.context.properties.bind.Binder;
|
||||
@ -25,6 +27,8 @@ public class DataSourceMagicDynamicRegistry extends AbstractMagicDynamicRegistry
|
||||
|
||||
private final MagicDynamicDataSource magicDynamicDataSource;
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(DataSourceMagicDynamicRegistry.class);
|
||||
|
||||
private static final ClassLoader CLASSLOADER = DataSourceMagicDynamicRegistry.class.getClassLoader();
|
||||
|
||||
// copy from DataSourceBuilder
|
||||
@ -40,7 +44,11 @@ public class DataSourceMagicDynamicRegistry extends AbstractMagicDynamicRegistry
|
||||
|
||||
@EventListener(condition = "#event.type == 'datasource'")
|
||||
public void onFileEvent(FileEvent event) {
|
||||
processEvent(event);
|
||||
try {
|
||||
processEvent(event);
|
||||
} catch (Exception e) {
|
||||
logger.error("注册数据源失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
package org.ssssssss.magicapi.service.impl;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.boot.context.event.ApplicationStartedEvent;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
@ -49,6 +51,8 @@ public class DefaultMagicResourceService implements MagicResourceService, JsonCo
|
||||
|
||||
private final ApplicationEventPublisher publisher;
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(DefaultMagicResourceService.class);
|
||||
|
||||
public DefaultMagicResourceService(Resource resource, List<MagicResourceStorage<? extends MagicEntity>> storages, ApplicationEventPublisher publisher) {
|
||||
this.root = resource;
|
||||
this.storages = storages.stream()
|
||||
@ -800,6 +804,10 @@ public class DefaultMagicResourceService implements MagicResourceService, JsonCo
|
||||
|
||||
@Override
|
||||
public void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) {
|
||||
this.read();
|
||||
try {
|
||||
this.read();
|
||||
} catch (Exception e) {
|
||||
logger.error("启动过程中发生异常", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,11 +3,13 @@ package org.ssssssss.magicapi.service.impl;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.servlet.HandlerMapping;
|
||||
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
|
||||
import org.ssssssss.magicapi.controller.RequestHandler;
|
||||
import org.ssssssss.magicapi.event.FileEvent;
|
||||
import org.ssssssss.magicapi.event.GroupEvent;
|
||||
import org.ssssssss.magicapi.exception.InvalidArgumentException;
|
||||
import org.ssssssss.magicapi.model.ApiInfo;
|
||||
import org.ssssssss.magicapi.provider.MagicResourceStorage;
|
||||
import org.ssssssss.magicapi.script.ScriptManager;
|
||||
@ -26,6 +28,8 @@ import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import static org.ssssssss.magicapi.model.JsonCodeConstants.REQUEST_PATH_CONFLICT;
|
||||
|
||||
public class RequestMagicDynamicRegistry extends AbstractMagicDynamicRegistry<ApiInfo> {
|
||||
|
||||
private final Mapping mapping;
|
||||
@ -36,9 +40,12 @@ public class RequestMagicDynamicRegistry extends AbstractMagicDynamicRegistry<Ap
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(RequestMagicDynamicRegistry.class);
|
||||
|
||||
public RequestMagicDynamicRegistry(MagicResourceStorage<ApiInfo> magicResourceStorage, Mapping mapping) throws NoSuchMethodException {
|
||||
private final boolean allowOverride;
|
||||
|
||||
public RequestMagicDynamicRegistry(MagicResourceStorage<ApiInfo> magicResourceStorage, Mapping mapping, boolean allowOverride) throws NoSuchMethodException {
|
||||
super(magicResourceStorage);
|
||||
this.mapping = mapping;
|
||||
this.allowOverride = allowOverride;
|
||||
MagicResourceLoader.addFunctionLoader(this::lookupLambdaFunction);
|
||||
}
|
||||
|
||||
@ -93,7 +100,17 @@ public class RequestMagicDynamicRegistry extends AbstractMagicDynamicRegistry<Ap
|
||||
int index = mappingKey.indexOf(":");
|
||||
String requestMethod = mappingKey.substring(0, index);
|
||||
String path = mappingKey.substring(index + 1);
|
||||
mappingNode.setMappingData(mapping.register(requestMethod, path, handler, method));
|
||||
RequestMappingInfo requestMappingInfo = mapping.paths(path).methods(RequestMethod.valueOf(requestMethod.toUpperCase())).build();
|
||||
if (mapping.getHandlerMethods().containsKey(requestMappingInfo)) {
|
||||
if (!allowOverride) {
|
||||
logger.error("接口[{}({})]与应用冲突,无法注册", mappingNode.getEntity().getName(), mappingKey);
|
||||
throw new InvalidArgumentException(REQUEST_PATH_CONFLICT.format(mappingNode.getEntity().getName(),mappingKey));
|
||||
}
|
||||
logger.warn("取消注册应用接口:{}", requestMappingInfo);
|
||||
// 取消注册原接口
|
||||
mapping.unregister(requestMappingInfo);
|
||||
}
|
||||
mappingNode.setMappingData(mapping.register(requestMappingInfo, handler, method));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user