diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/controller/MagicWorkbenchController.java b/magic-api/src/main/java/org/ssssssss/magicapi/controller/MagicWorkbenchController.java index 68886f32..4c80cca7 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/controller/MagicWorkbenchController.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/controller/MagicWorkbenchController.java @@ -149,9 +149,16 @@ public class MagicWorkbenchController extends MagicController implements MagicEx return new JsonBean<>(Stream.of(Options.values()).map(item -> Arrays.asList(item.getValue(), item.getName(), item.getDefaultValue())).collect(Collectors.toList())); } + @GetMapping("/reload") + @ResponseBody + public JsonBean reload(HttpServletRequest request) { + isTrue(allowVisit(request, Authorization.RELOAD), PERMISSION_INVALID); + MagicConfiguration.getMagicResourceService().refresh(); + return new JsonBean<>(true); + } + @GetMapping("/search") @ResponseBody - @Valid public JsonBean>> search(String keyword, HttpServletRequest request) { if (StringUtils.isBlank(keyword)) { return new JsonBean<>(Collections.emptyList()); diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/interceptor/Authorization.java b/magic-api/src/main/java/org/ssssssss/magicapi/interceptor/Authorization.java index ceb9a4a0..05e43287 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/interceptor/Authorization.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/interceptor/Authorization.java @@ -41,5 +41,9 @@ public enum Authorization { /** * 解锁动作 */ - UNLOCK -} \ No newline at end of file + UNLOCK, + /** + * 重新加载 + */ + RELOAD +} diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/service/AbstractMagicDynamicRegistry.java b/magic-api/src/main/java/org/ssssssss/magicapi/service/AbstractMagicDynamicRegistry.java index f1b11381..6b00ce77 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/service/AbstractMagicDynamicRegistry.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/service/AbstractMagicDynamicRegistry.java @@ -58,14 +58,15 @@ public abstract class AbstractMagicDynamicRegistry implem } @EventListener(condition = "#event.action == T(org.ssssssss.magicapi.event.EventAction).CLEAR") - public void clear(MagicEvent event){ + public void clear(MagicEvent event) { Iterator>> iterator = mappings.entrySet().iterator(); - while (iterator.hasNext()){ + while (iterator.hasNext()) { Map.Entry> entry = iterator.next(); - unregister(entry.getValue()); + if (Objects.equals(entry.getKey(), entry.getValue().getEntity().getId())) { + unregister(entry.getValue()); + } iterator.remove(); } - } protected void processEvent(FileEvent event) { diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/service/impl/DataSourceMagicDynamicRegistry.java b/magic-api/src/main/java/org/ssssssss/magicapi/service/impl/DataSourceMagicDynamicRegistry.java index d6847a45..85fd7509 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/service/impl/DataSourceMagicDynamicRegistry.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/service/impl/DataSourceMagicDynamicRegistry.java @@ -1,8 +1,6 @@ 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; @@ -46,7 +44,8 @@ public class DataSourceMagicDynamicRegistry extends AbstractMagicDynamicRegistry } @Override - public boolean register(DataSourceInfo info) { + protected boolean register(MappingNode mappingNode) { + DataSourceInfo info = mappingNode.getEntity(); Map properties = new HashMap<>(info.getProperties()); properties.put("url", info.getUrl()); properties.put("username", info.getUsername()); @@ -62,10 +61,9 @@ public class DataSourceMagicDynamicRegistry extends AbstractMagicDynamicRegistry return true; } - @Override - public boolean unregister(DataSourceInfo info) { - return magicDynamicDataSource.delete(info.getKey()); + protected void unregister(MappingNode mappingNode) { + magicDynamicDataSource.delete(mappingNode.getMappingKey()); } // copy from DataSourceBuilder