ArchaiusAutoConfiguration 从 spring 引导中排除但仍未禁用默认系统配置

ArchaiusAutoConfiguration excluded from spring boot but still not disabling default system configuration

我们公司有 tomcat 的安全政策,如果需要任何新的安全政策,我们将不得不提出要求。我正在使用 spring-cloud-starter-hystrix-1.4.1.RELEASE,它正在使用 archaius-core-0.7.4.jar。我们的服务器管理员绝对不会授予以下权限,这基本上要求所有内容的读写权限

Caused by: java.lang.ExceptionInInitializerError
        at com.netflix.config.DynamicPropertyFactory.getInstance(DynamicPropertyFactory.java:277)
        at com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet.<clinit>(HystrixMetricsStreamServlet.java:55)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at org.springframework.web.servlet.mvc.ServletWrappingController.afterPropertiesSet(ServletWrappingController.java:144)
        at org.springframework.cloud.netflix.endpoint.ServletWrappingEndpoint.afterPropertiesSet(ServletWrappingEndpoint.java:50)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.run(AbstractAutowireCapableBeanFactory.java:1677)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1674)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
        ... 107 more
Caused by: java.lang.RuntimeException: Error initializing configuration
        at com.netflix.config.ConfigurationManager.<clinit>(ConfigurationManager.java:109)
        ... 120 more
Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "*" "read,write")
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
        at java.security.AccessController.checkPermission(AccessController.java:884)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
        at java.lang.SecurityManager.checkPropertiesAccess(SecurityManager.java:1262)
        at java.lang.System.getProperties(System.java:630)
        at org.apache.commons.configuration.SystemConfiguration.<init>(SystemConfiguration.java:44)
        at com.netflix.config.ConfigurationManager.createDefaultConfigInstance(ConfigurationManager.java:146)
        at com.netflix.config.ConfigurationManager.getConfigInstance(ConfigurationManager.java:161)
        at com.netflix.config.ConfigurationManager.getConfigInstance(ConfigurationManager.java:176)
        at com.netflix.config.ConfigurationBasedDeploymentContext.<init>(ConfigurationBasedDeploymentContext.java:108)
        at com.netflix.config.ConfigurationManager.<clinit>(ConfigurationManager.java:104)
        ... 120 more

研究了为什么 ConfigurationManager 中的 archaius.dynamicProperty.disableSystemConfig 值默认为 false,这让 archaius 默认系统配置。 commons-configuration jar 有一个使用 System.getProperties() 的代码,这就是我看到此错误的原因。

我们没有使用 archaius,因此从 spring 引导应用程序 class 中排除了 ArchaiusAutoConfiguration.class,但它似乎仍在寻找配置。

我的问题是如何禁用 archaius?从 spring 启动应用程序 class 中排除 ArchaiusAutoConfiguration 本身还不够吗?如果我必须将 archaius.dynamicProperty.disableSystemConfig 值设置为 true,我该怎么做以及在哪里设置?

也在 github 上提出了一个问题 https://github.com/Netflix/archaius/issues/539

属性archaius.dynamicProperty.disableSystemConfig必须声明为系统属性。 Archaius 仅尝试从系统 属性 中读取此 属性 的值。

源代码:https://github.com/Netflix/archaius/blob/master/archaius-core/src/main/java/com/netflix/config/ConfigurationManager.java#L165

我认为禁用 ArchaiusAutoConfiguration 本身并不是一个好主意。 Netflix OSS 正在使用 archaius,Spring Cloud 将其属性(在 Spring 中定义)提供给 archaius。因此 Spring Cloud 中的 Netflix OSS 没有它就无法正常工作。