ArchaiusAutoConfiguration исключена из весенней загрузки, но все еще не отключает конфигурацию системы по умолчанию

У нашей компании есть политика безопасности для 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$6.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

После исследования того, почему значение archaius.dynamicProperty.disableSystemConfig в ConfigurationManager по умолчанию равно false, что позволяет конфигурации системы по умолчанию для archaius. В jar commons-configuration есть код, который использует System.getProperties(), и именно поэтому я вижу эту ошибку.

Мы не используем archaius, поэтому исключили ArchaiusAutoConfiguration.class из класса весенней загрузки приложения, но похоже, что он все еще ищет конфигурацию.

У меня вопрос как отключить архаи? Недостаточно ли исключение ArchaiusAutoConfiguration из самого класса весенней загрузки? Если мне нужно установить значение archaius.dynamicProperty.disableSystemConfig в true, как я могу это сделать и где?

Также поднял проблему на github https://github.com/Netflix/archaius/issues/539

1 ответ

Решение

Недвижимость archaius.dynamicProperty.disableSystemConfig должен быть объявлен как системное свойство. Архай только пытается прочитать это значение этого свойства из системного свойства.

Исходный код: 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. Поэтому Netflix OSS внутри Spring Cloud не будет работать должным образом без него.