может весенний облачный конфиг управлять xml файлом - PullRequest
0 голосов
/ 07 июня 2018

мы сейчас используем весеннюю загрузочную версию 1.5.13.RELEASE, весеннюю облачную версию - Edgware.SR3, а весеннюю облачную конфигурационную версию - 1.4.3.RELEASE。

И мы используемeureka 1.7.2 как наш центр реестра, а config-сервер и config-клиент - это eureka-client.

, когда мы думаем, что, поскольку весенний облачный конфиг является сервером конфигурации, и он должен бытьуправлять любым типом конфигов нашего приложения.поэтому мы помещаем logback.xml в github и ссылаемся на spring cloud doc , мы можем получить logback.xml в config-клиенте, установив

 logging.config=${spring.cloud.config.uri}/*/default/master/logback.xml.

однакоТак как config-сервер и config-client являются клиентом eureka-сервера, он должен использовать имя службы для связи.и мы устанавливаем config int в файле bootstrap.properties клиента config следующим образом:

spring.cloud.config.name=logback
spring.cloud.config.profile=default
spring.cloud.config.label=master
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=config-server-name
eureka.client.serviceUrl.defaultZone=http://admin:admin@localhost:7001/eureka/

, но когда мы запускаем клиент config, на сервере config возникает ошибка, которая:

java.lang.IllegalStateException: Failed to load property source from location 'file:/D:/others/test/configBack/qing-cloud-m1-config/logback-spring.xml'

Caused by: java.util.InvalidPropertiesFormatException: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 16; 文档根元素 "configuration" 必须匹配 DOCTYPE 根 "null"。
    at sun.util.xml.PlatformXmlPropertiesProvider.load(PlatformXmlPropertiesProvider.java:80)
    at java.util.Properties$XmlSupport.load(Properties.java:1201)
    at java.util.Properties.loadFromXML(Properties.java:881)
    at org.springframework.core.io.support.PropertiesLoaderUtils.fillProperties(PropertiesLoaderUtils.java:136)
    at org.springframework.core.io.support.PropertiesLoaderUtils.loadProperties(PropertiesLoaderUtils.java:121)
    at org.springframework.boot.env.PropertiesPropertySourceLoader.load(PropertiesPropertySourceLoader.java:44)
    at org.springframework.boot.env.PropertySourcesLoader.load(PropertySourcesLoader.java:128)
    at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.doLoadIntoGroup(ConfigFileApplicationListener.java:490)
    at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.loadIntoGroup(ConfigFileApplicationListener.java:473)
    ... 87 common frames omitted

так, как я могу решить эту проблему, и конфигурация весеннего облака не может хранить xml или файл другого типа?если это так, то, возможно, существует множество ограничений

Я прочитал исходный код и обнаружил, что он может загружать XML-файл, но почему возникают такие проблемы public static void fillProperties(Properties props, Resource resource) throws IOException { InputStream is = resource.getInputStream(); try { String filename = resource.getFilename(); if (filename != null && filename.endsWith(XML_FILE_EXTENSION)) { props.loadFromXML(is); } else { props.load(is); } } finally { is.close(); } }

logback.xml нижеи это будет выполнено в автономном весеннем загрузочном проекте `` `

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>${ENCODER_PATTERN}</pattern>
    </encoder>
</appender>
<appender name="FILE-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>../../log/${LOG-NAME}.%d{yyyy-MM-dd}.log</fileNamePattern>
    </rollingPolicy>
    <encoder>
        <pattern>${ENCODER_PATTERN}</pattern>
    </encoder>
</appender>
<logger name="cn.jz" additivity="false" level="DEBUG">
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="FILE-APPENDER"/>
</logger>

<root level="DEBUG">
    <appender-ref ref="CONSOLE" />
</root>

` ``

1 Ответ

0 голосов
/ 20 июня 2018

Вы можете сохранить любой текстовый файл в git, который используется в качестве хранилища конфигурации для сервера spring-cloud-config, но Spring может автоматически разрешать только .properties и .yml.Для извлечения файлов других форматов вы должны использовать функцию «Предоставление простого текста», на которую вы ссылаетесь в вопросе.

Но когда вы начинаете использовать службу обнаружения, вы не можете использовать свойство spring.cloud.config.uri, поскольку URL-адрес автоматически обнаруживается клиентом eureka.Поэтому следующее свойство logging.config недопустимо:

logging.config=${spring.cloud.config.uri}/*/default/master/logback.xml

Для извлечения пользовательских файлов из config-сервера мы использовали discoveryClient, запрашивали URL-адрес config-сервера по имени в @PostConstruct и загружали вручную.Но для логгера это будет слишком поздно, потому что логбэк нуждается в конфигурации на этапе начальной загрузки.После исследования подобных проблем я выяснил, что свойства могут быть настроены / установлены на этапе начальной загрузки: Настройка источников свойств начальной загрузки .Таким образом, мы решили эту проблему, установив пользовательское свойство config-server-uri, и logback смог загрузить его файл конфигурации.Больше деталей реализации в моем ответе в stackOverflow .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...