diff --git a/core/src/main/java/com/taobao/arthas/core/config/BinderUtils.java b/core/src/main/java/com/taobao/arthas/core/config/BinderUtils.java index fe52eb441..8af4e2cd5 100644 --- a/core/src/main/java/com/taobao/arthas/core/config/BinderUtils.java +++ b/core/src/main/java/com/taobao/arthas/core/config/BinderUtils.java @@ -51,9 +51,12 @@ public class BinderUtils { && methodName.length() > "set".length()) { String field = getFieldNameFromSetterMethod(methodName); - Object reslovedValue = environment.getProperty(prefix + '.' + field, parameterTypes[0]); - if (reslovedValue != null) { - method.invoke(instance, new Object[] { reslovedValue }); + String configKey = prefix + '.' + field; + if (environment.containsProperty(configKey)) { + Object reslovedValue = environment.getProperty(prefix + '.' + field, parameterTypes[0]); + if (reslovedValue != null) { + method.invoke(instance, new Object[] { reslovedValue }); + } } } } diff --git a/core/src/main/java/com/taobao/arthas/core/config/TestConfig.java b/core/src/main/java/com/taobao/arthas/core/config/TestConfig.java deleted file mode 100644 index 2145f47ca..000000000 --- a/core/src/main/java/com/taobao/arthas/core/config/TestConfig.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.taobao.arthas.core.config; - - -@Config -public class TestConfig { - - @NestedConfig - SecondConfig secondConfig; -} diff --git a/core/src/main/java/com/taobao/arthas/core/server/ArthasBootstrap.java b/core/src/main/java/com/taobao/arthas/core/server/ArthasBootstrap.java index b19fa7084..3bf10784d 100644 --- a/core/src/main/java/com/taobao/arthas/core/server/ArthasBootstrap.java +++ b/core/src/main/java/com/taobao/arthas/core/server/ArthasBootstrap.java @@ -1,13 +1,35 @@ package com.taobao.arthas.core.server; -import com.taobao.arthas.core.config.Configure; -import com.taobao.arthas.core.config.FeatureCodec; -import com.taobao.arthas.core.env.ArthasEnvironment; -import com.taobao.arthas.core.env.MapPropertySource; +import java.arthas.Spy; +import java.io.File; +import java.io.IOException; +import java.lang.instrument.Instrumentation; +import java.lang.reflect.Method; +import java.net.URI; +import java.security.CodeSource; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Properties; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; + import com.alibaba.arthas.tunnel.client.TunnelClient; import com.taobao.arthas.common.PidUtils; import com.taobao.arthas.core.advisor.AdviceWeaver; import com.taobao.arthas.core.command.BuiltinCommandPack; +import com.taobao.arthas.core.config.BinderUtils; +import com.taobao.arthas.core.config.Configure; +import com.taobao.arthas.core.config.FeatureCodec; +import com.taobao.arthas.core.env.ArthasEnvironment; +import com.taobao.arthas.core.env.MapPropertySource; +import com.taobao.arthas.core.env.PropertiesPropertySource; +import com.taobao.arthas.core.env.PropertySource; import com.taobao.arthas.core.shell.ShellServer; import com.taobao.arthas.core.shell.ShellServerOptions; import com.taobao.arthas.core.shell.command.CommandResolver; @@ -17,35 +39,23 @@ import com.taobao.arthas.core.shell.term.impl.HttpTermServer; import com.taobao.arthas.core.shell.term.impl.httptelnet.HttpTelnetTermServer; import com.taobao.arthas.core.util.ArthasBanner; import com.taobao.arthas.core.util.Constants; +import com.taobao.arthas.core.util.FileUtils; import com.taobao.arthas.core.util.LogUtil; import com.taobao.arthas.core.util.UserStatUtil; import com.taobao.middleware.logger.Logger; import io.netty.channel.ChannelFuture; -import java.arthas.Spy; -import java.io.File; -import java.io.IOException; -import java.lang.instrument.Instrumentation; -import java.lang.reflect.Method; -import java.net.URI; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; - /** * @author vlinux on 15/5/2. */ public class ArthasBootstrap { + public static final String CONFIG_NAME_PROPERTY = "arthas.config.name"; + public static final String CONFIG_LOCATION_PROPERTY = "arthas.config.location"; + public static final String CONFIG_OVERRIDE_ALL= "arthas.config.overrideAll"; + private static Logger logger = LogUtil.getArthasLogger(); private static ArthasBootstrap arthasBootstrap; @@ -102,23 +112,84 @@ public class ArthasBootstrap { public void bind(String args) throws Throwable { initSpy(); - if( arthasEnvironment == null) { + if (arthasEnvironment == null) { arthasEnvironment = new ArthasEnvironment(); } - Configure configure = Configure.toConfigure(args); + + /** + *
+ * 脚本里传过来的配置项,即命令行参数 > System Env > System Properties > arthas.properties + * arthas.properties 指供一个配置项,可以反转优先级。 arthas.config.overrideAll=true + * https://github.com/alibaba/arthas/issues/986 + *+ */ Map