Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
spring云配置可以管理xml文件吗_Xml_Spring Boot_Logback_Spring Cloud_Spring Cloud Config - Fatal编程技术网

spring云配置可以管理xml文件吗

spring云配置可以管理xml文件吗,xml,spring-boot,logback,spring-cloud,spring-cloud-config,Xml,Spring Boot,Logback,Spring Cloud,Spring Cloud Config,我们现在使用的spring引导版本是1.5.13.RELEASE,spring云版本是Edgware.SR3,spring云配置版本是1.4.3.RELEASE <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${ENCODER_PATTERN}</pattern> </encode

我们现在使用的spring引导版本是1.5.13.RELEASE,spring云版本是Edgware.SR3,spring云配置版本是1.4.3.RELEASE

<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>
我们使用eureka 1.7.2作为注册中心,配置服务器和配置客户端就是eureka客户端

<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>
当我们这样想的时候,因为SpringCloud配置是配置服务器,它应该管理我们应用程序的任何类型的配置。因此,我们将logback.xml放在github中,并参考,我们可以通过设置

 logging.config=${spring.cloud.config.uri}/*/default/master/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>
但是,由于配置服务器和配置客户端是eureka服务器的客户端,因此它应该使用服务名称进行通信。我们将config int设置为config客户端的bootstrap.properties,如下所示:

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/
<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>
但是,当我们启动配置客户端时,配置服务器会发生以下错误:

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
<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>
那么,我如何解决这个问题,而SpringCloud配置不能存储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>
我阅读了源代码,发现它可能无法加载xml文件,但为什么会出现这种问题呢

公共静态void fillProperties(Properties props,Resource Resource)引发IOException{
InputStream=resource.getInputStream();
试一试{
字符串filename=resource.getFilename();
if(filename!=null&&filename.endsWith(XML文件扩展名)){
loadFromXML(is);
}
否则{
道具载荷(is);
}
}
最后{
is.close();
}
}

<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>
下面是logback.xml,它可以在独立的spring引导项目中执行 ```

<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>

${ENCODER_PATTERN}
../../log/${log-NAME}.%d{yyyy-MM-dd}.log
${ENCODER_PATTERN}

```

您可以在git中存储用作spring cloud config server配置存储的任何文本文件,但spring只能自动解析
.properties
.yml
。对于获取其他文件格式,您应该使用问题中要引用的服务纯文本功能

<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>
但当您开始使用发现服务时,您不能使用property
spring.cloud.config.uri
,因为url是由eureka客户端自动发现的。因此
logging.config
的下一个属性无效:

<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>
logging.config=${spring.cloud.config.uri}/*/default/master/logback.xml

为了从配置服务器获取自定义文件,我们使用discoveryClient,在@PostConstruct中按名称请求配置服务器的URL,并手动下载。但是对于logger来说,这已经太晚了,因为logback需要在引导阶段进行配置。在研究了类似的问题后,我发现可以在引导阶段自定义/设置属性:。所以我们通过设置配置服务器uri的自定义属性来解决这个问题,logback能够下载它的配置文件。更多实现细节请参见。

谢谢您的回答,@nmyk,spring cloud配置似乎有很多限制,logback.xml id只是我的一个示例,如果我想集成dubbo.properties,我应该怎么做?我不确定我的评论是否有用,我从未使用过dubbo。但您可以查看一下,看起来所有属性都是在application.properties中管理的,因此它们将自动获取。如果您有不同的系统,并且希望使用xml配置和spring cloud配置,那么您可能应该使用您的代码将它们作为常规文件下载到temp文件夹,然后初始化上下文(我们使用config server中的csv文件使用这种方法)。
<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>