当前位置: 首页 > 知识库问答 >
问题:

spring cloud config可以管理xml文件吗

左丘子平
2023-03-14

我们现在使用的spring boot版本是1.5.13.release,spring cloud版本是edgware.sr3,而spring cloud config版本是1.4.3.release。

我们使用Eureka1.7.2作为我们的注册中心,配置服务器和配置客户端是Eureka-Client。

当我们认为,因为spring cloud config是配置服务器,它应该管理应用程序的任何类型的配置。因此,我们将logback.xml放入github并引用spring cloud文档,通过设置

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

但是,当我们启动配置客户端时,配置服务器会出现一个错误:

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

那么,spring cloud配置不能存储xml或其他类型的文件,我该如何解决这个问题呢?如果是这样,可能会有很多限制

我阅读了源代码,发现它可能是可以加载xml文件,但为什么会出现问题public static void fillProperties(Properties props,Resource Resource)抛出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{

下面是logback.xml,it云在独立的Spring Boot项目中执行```

<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个答案

危文乐
2023-03-14

您可以在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-server获取自定义文件,我们使用了discoveryClient,在@PostConstruct中按名称请求config-server的URL,并手动下载。但是对于logger来说就太晚了,因为logback需要在引导阶段进行配置。在研究了类似的问题之后,我发现可以在引导阶段定制/设置属性:定制引导属性源。因此,我们通过设置config-server-uri的自定义属性解决了这个问题,并且logback能够下载它的配置文件。更多实现细节请参见我在StackOverflow中的回答。

 类似资料:
  • 我使用Maven构建了一个Jar。我试图实现的行为是:当用户使用命令create时,我想在JAR的一个文件夹中存储一个XML文件。有可能做到吗? 假设这是一个项目,我将迁移工具的jar添加到其中。我希望能够看到和编辑属性文件

  • 这篇文档描述了Django为那些用户上传文件准备的文件访问API。底层的API足够通用,你可以使用为其它目的来使用它们。如果你想要处理静态文件(JS,CSS,以及其他),参见管理静态文件(CSS和图像)。 通常,Django使用MEDIA_ROOT和 MEDIA_URL设置在本地储存文件。下面的例子假设你使用这些默认值。 然而,Django提供了一些方法来编写自定义的 文件储存系统,允许你完全自定

  • 文件管理 C-x d (M-x dired) 进入 Dired 列表模式 C-x C-d (M-x list-directory) 获取文件列表(简洁) C-x C-f (M-x find-file) 打开文件,没有文件名则打开目录 定位、查看 表 25.16. Emacs 文件管理   向下 向上   文件 n p C-n C-p SPC DEL 上一级 目录 > < ^ 已标记 M-} M-{

  • 使用 Vim 编辑目录时,会进入文件管理模式: vim . 文件管理模式中可以实现一些简单的文件管理功能: enter 打开文件或文件夹 Ctrl+o 后退 o 新开一栏进行编辑 O 在前一次打开的栏中编辑 p 预览 i 显示/隐藏文件大小、日期 s 切换文件排序方式 r 切换顺序、逆序 - 回到上一级目录 c 将 Vim 执行目录设定为当前目录 R 重命名 D 删除 x 运行 :cd 设定所有窗

  • 细节 / 目录为文件系统根目录,所有目录都是它的子目录 绝对路径以 / 起始,相对路径以当前所在目录起始 目录是一种特殊类型的文件,如果没有特别指明, 文件 包括文件和目录 .. 表示上一级目录, . 表示当前目录,它们是两个特殊目录 链接. 为当前文件建立在其它路径中的访问方法。例如将系统中其它位置的可执行文件,链接到 /usr/local/bin 目录下,使用命令调用。 ls [路径] 显示当

  • 对于计算机来说,所谓的数据就是0和1的序列。这样的一个序列可以存储在内存中,但内存中的数据会随着关机而消失。为了将数据长久保存,我们把数据存储在光盘或者硬盘中。根据我们的需要,我们通常会将数据分开保存到文件这样一个个的小单位中(所谓的小,是相对于所有的数据而言)。但如果数据只能组织为文件的话,而不能分类的话,文件还是会杂乱无章。每次我们搜索某一个文件,就要一个文件又一个文件地检查,太过麻烦。文件系