yaml语法问题, <<: 无法引用另一文件中的内容

JoeBlackzqq 2019-06-27 09:44:41
基于springboot的项目, 有两个配置文件:
application-local.yaml中有如下内容:

test: &test
name: joe
hello: 你好吗
age: 23


另一个文件application.yaml中想引用这个内容:

myserver:
test:
<<: *test


这样使用发现程序无法启动, 报错如下:

21:33:48.943 [main] DEBUG org.springframework.boot.context.logging.ClasspathLoggingApplicationListener - Application failed to start with classpath: unknown
21:33:49.019 [background-preinit] DEBUG org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator - Loaded expression factory via original TCCL
21:33:49.023 [background-preinit] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator as ValidatorFactory-scoped message interpolator.
21:33:49.024 [background-preinit] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.engine.resolver.TraverseAllTraversableResolver as ValidatorFactory-scoped traversable resolver.
21:33:49.024 [background-preinit] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.util.ExecutableParameterNameProvider as ValidatorFactory-scoped parameter name provider.
21:33:49.024 [background-preinit] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.engine.DefaultClockProvider as ValidatorFactory-scoped clock provider.
21:33:49.024 [background-preinit] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.engine.scripting.DefaultScriptEvaluatorFactory as ValidatorFactory-scoped script evaluator factory.
21:33:49.337 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application.yaml'
at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:556)
at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.loadForFileExtension(ConfigFileApplicationListener.java:502)
at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:469)
at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.lambda$null$6(ConfigFileApplicationListener.java:450)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.lambda$load$7(ConfigFileApplicationListener.java:449)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:446)
at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:334)
at org.springframework.boot.context.config.ConfigFileApplicationListener.addPropertySources(ConfigFileApplicationListener.java:209)
at org.springframework.boot.context.config.ConfigFileApplicationListener.postProcessEnvironment(ConfigFileApplicationListener.java:192)
at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEnvironmentPreparedEvent(ConfigFileApplicationListener.java:179)
at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEvent(ConfigFileApplicationListener.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)
at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:75)
at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54)
at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:347)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:306)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
at com.zcm.mybatis.MybatisApplication.main(MybatisApplication.java:14)
Caused by: org.yaml.snakeyaml.composer.ComposerException: found undefined alias test
in 'reader', line 40, column 9:
<<: *test
^


我想根本原因应该是这个引用的内容在另一文件的原因! 难道引用的内容只能在同一个文件才可以吗?
...全文
158 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文系统解析了YAMLYAML Ain't Markup Language)这一人类友好型数据序列化格式的核心概念、语法规范及实际应用。详细介绍了YAML的基础数据类型(字符串、数字、布尔值、空值、日期时间)、复合结构(列表与字典)以及特殊语法(多行字符串、锚点与引用),并通过与JSON的对比突出其在可读性、简洁性和功能丰富性方面的优势。文章还结合Python语言,演示了使用pyyaml库进行YAML文件读写操作的完整流程,并强调了安全实践如使用safe_load()防范恶意代码。最后指出YAML在云原生、自动化运维等领域的广泛应用前景。; 适合人群:具备一定编程基础,熟悉配置文件使用的技术人员,尤其是从事DevOps、云计算、自动化部署及相关开发工作的1-3年经验研发人员; 使用场景及目标:①学习YAML语法并应用于Docker Compose、Kubernetes、Ansible等工具的配置编写;②掌握PythonYAML文件的序列化与反序列化操作,提升项目配置管理能力;③理解YAML相对于JSON的优势,优化团队配置文件可维护性; 阅读建议:学习过程应重点关注缩进规则、锚点复用机制和多行字符串处理方式,配合Python实战代码动手练习读写操作,注意编码设置与安全加载,建议在真实项目尝试迁移或新建YAML配置以加深理解。

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧