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 仅尝试从系统 属性 中读取此 属性 的值。
我认为禁用 ArchaiusAutoConfiguration
本身并不是一个好主意。 Netflix OSS 正在使用 archaius,Spring Cloud 将其属性(在 Spring 中定义)提供给 archaius。因此 Spring Cloud 中的 Netflix OSS 没有它就无法正常工作。
我们公司有 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 仅尝试从系统 属性 中读取此 属性 的值。
我认为禁用 ArchaiusAutoConfiguration
本身并不是一个好主意。 Netflix OSS 正在使用 archaius,Spring Cloud 将其属性(在 Spring 中定义)提供给 archaius。因此 Spring Cloud 中的 Netflix OSS 没有它就无法正常工作。