From 2e1ff333f56540624d94073e90701ca46383f56b Mon Sep 17 00:00:00 2001 From: Redkale <8730487+redkale@users.noreply.github.com> Date: Sat, 12 Jan 2019 11:16:27 +0800 Subject: [PATCH] =?UTF-8?q?Application.singleton=E5=A4=9A=E5=8A=A0?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E5=8F=82=E6=95=B0=EF=BC=8C=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E5=85=B6=E4=BB=96Service=E4=B9=9F=E8=A2=AB=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/org/redkale/boot/Application.java | 14 +++++++++++--- src/org/redkale/boot/NodeServer.java | 12 +++++++++++- src/org/redkale/source/EntityInfo.java | 2 +- src/org/redkale/source/FilterNode.java | 2 +- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/org/redkale/boot/Application.java b/src/org/redkale/boot/Application.java index 3ac9278a7..db36938c1 100644 --- a/src/org/redkale/boot/Application.java +++ b/src/org/redkale/boot/Application.java @@ -812,14 +812,22 @@ public final class Application { sercdl.await(); } - public static T singleton(Class serviceClass) throws Exception { - return singleton("", serviceClass); + public static T singleton(Class serviceClass, Class... extServiceClasses) throws Exception { + return singleton("", serviceClass, extServiceClasses); } - public static T singleton(String name, Class serviceClass) throws Exception { + public static T singleton(String name, Class serviceClass, Class... extServiceClasses) throws Exception { if (serviceClass == null) throw new IllegalArgumentException("serviceClass is null"); final Application application = Application.create(true); System.setProperty("red" + "kale-singleton-serviceclass", serviceClass.getName()); + if (extServiceClasses != null && extServiceClasses.length > 0) { + StringBuilder sb = new StringBuilder(); + for (Class clazz : extServiceClasses) { + if (sb.length() > 0) sb.append(','); + sb.append(clazz.getName()); + } + System.setProperty("red" + "kale-singleton-extserviceclasses", sb.toString()); + } application.init(); application.start(); for (NodeServer server : application.servers) { diff --git a/src/org/redkale/boot/NodeServer.java b/src/org/redkale/boot/NodeServer.java index 8f7161a37..927a9d2d6 100644 --- a/src/org/redkale/boot/NodeServer.java +++ b/src/org/redkale/boot/NodeServer.java @@ -156,7 +156,17 @@ public abstract class NodeServer { ClassFilter serviceFilter = createServiceClassFilter(); if (application.singletonrun) { //singleton模式下只加载指定的Service final String ssc = System.getProperty("red" + "kale-singleton-serviceclass"); - if (ssc != null) serviceFilter.setExpectPredicate(c -> !ssc.equals(c)); + final String extssc = System.getProperty("red" + "kale-singleton-extserviceclasses"); + if (ssc != null) { + final List sscList = new ArrayList<>(); + sscList.add(ssc); + if (extssc != null && !extssc.isEmpty()) { + for (String s : extssc.split(",")) { + if (!s.isEmpty()) sscList.add(s); + } + } + serviceFilter.setExpectPredicate(c -> !sscList.contains(c)); + } } ClassFilter filterFilter = createFilterClassFilter(); ClassFilter servletFilter = createServletClassFilter(); diff --git a/src/org/redkale/source/EntityInfo.java b/src/org/redkale/source/EntityInfo.java index d85ce5986..08fefe4a7 100644 --- a/src/org/redkale/source/EntityInfo.java +++ b/src/org/redkale/source/EntityInfo.java @@ -878,7 +878,7 @@ public final class EntityInfo { * * @return Object */ - public Object getSQLValue(String fieldname, Object fieldvalue) { + public Object getSQLValue(String fieldname, Serializable fieldvalue) { if (this.cryptmap == null) return fieldvalue; CryptHandler handler = this.cryptmap.get(fieldname); if (handler == null) return fieldvalue; diff --git a/src/org/redkale/source/FilterNode.java b/src/org/redkale/source/FilterNode.java index 6dfd961ed..c837d9129 100644 --- a/src/org/redkale/source/FilterNode.java +++ b/src/org/redkale/source/FilterNode.java @@ -389,7 +389,7 @@ public class FilterNode { //FilterNode 不能实现Serializable接口, 否则 .append(' ').append(fv.getExpress().value()).append(' ').append(fv.getDestvalue()); } final boolean fk = (val0 instanceof FilterKey); - CharSequence val = fk ? info.getSQLColumn(talis, ((FilterKey) val0).getColumn()) : formatToString(express, info.getSQLValue(column, val0)); + CharSequence val = fk ? info.getSQLColumn(talis, ((FilterKey) val0).getColumn()) : formatToString(express, info.getSQLValue(column, (Serializable) val0)); if (val == null) return null; StringBuilder sb = new StringBuilder(32); if (express == CONTAIN) return info.containSQL.replace("${column}", info.getSQLColumn(talis, column)).replace("${keystr}", val);