weixin_48050721 2021-02-08 13:13 采纳率: 50%
浏览 1200
已采纳

idea中创建springboot中用@Value读取.yml文件无法读取里面的数据

   studenting:
     id:1
     name:liuyupeng

这个是application.yaml文件中的数据

然后测试

package com;

import com.domain.Student;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class Ch1101SpringbootApplicationTests {

	@Autowired
	private Student student;
	@Test
	void contextLoads() {
		System.out.println(student);
	}

}

结果报错

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'student': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'studenting.name' in value "${studenting.name}"

我的yaml文件都是有叶子图标的
 

  • 写回答

10条回答 默认 最新

  • 搬山境KL攻城狮 2021-02-08 17:16
    关注

    你这个yaml配置好像有点问题吧,要严格按照yaml的语法了,这是个将空格用到极致的语法。

    试下:注意冒号后面的空格

    studenting:

    id: 1

    name: liuyupeng

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • weixin_48050721 2021-02-08 13:16
    关注
    @Component
    
    public class Student {
    
        @Value("${studenting.id}")
        private int id;
        @Value("${studenting.name}")
    

    }

    .yaml文件中

    studenting:
      id:1
      name:lg
    评论
  • a1767028198 2021-02-08 13:32
    关注

    就这么一眼过去 没有get set方法  也没有Lombok的注解 - -

    评论
  • _寻隐者不遇 2021-02-08 13:49
    关注

    使用@value注解

    评论
  • 【追梦少年】 2021-02-08 14:18
    关注

    试试这样写@Value(value = "${studenting.id}")

    评论
  • 封印di恶魔 2021-02-08 15:41
    关注

    studenting是不是顶层的?看你复制过来的   studenting前面还有缩进

    评论
  • damoneric_guo 2021-02-08 16:45
    关注
    @Value("${web.upload-path}")
    private String uploadFoldName;

    你的是

    @Value("${studenting.name}")

    private String studentingName;

    这样就可以取到

    但是记住 studenting靠近前面

    评论
  • 编程爱好者熊浪 2021-02-08 17:45
    关注

    加上@RunWith和对应的SpringBoot启动文件试下。

    评论
  • 全江_PRO 2021-02-08 18:01
    关注

    yml配置文件前面空格问题,

    评论
  • 保质期已过 2021-02-08 22:23
    关注

    如下完整代码,供参考


    创建Student

    @Component //利用springIOC创建对象
    public class Student {
    
        @Value("${studenting.id}")//将yml中的值通过set方法复值给属性id
        private String id;
        @Value("${studenting.name}")//将yml中的值通过set方法复值给属性name
        private String name;
    
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        /**
         * 方便输出
         * @return
         */
        @Override
        public String toString() {
            return "Student{" +
                    "id='" + id + '\'' +
                    ", name='" + name + '\'' +
                    '}';
        }
    }

    配置yml内容

     

    studenting:
      id: 1
      name: liuyupeng
    
    
    
    测试,注意需要创建spring测试换,应为设计springIOC内容和自动注入
    @SpringBootTest
    @RunWith(SpringRunner.class)//创建spring的测试环境
    public class Ch1101SpringbootApplicationTests {
    
        @Autowired
        private Student student;
        @Test
        public void contextLoads(){
            System.out.println(student);
        }
    }

    测试结果

     

     

    评论
查看更多回答(9条)

报告相同问题?

悬赏问题

  • ¥15 shopify网站提速
  • ¥15 深海控制器DSE7320MKII和博世ECU间can通讯知识
  • ¥15 Ru的复折射率用于FDTD 200nm到1200nm
  • ¥15 使用Fiddler抓包,textview的乱码如何解决
  • ¥50 trio连接驱动器报错
  • ¥15 有谁懂nhanes的权重计算啊
  • ¥15 欧姆龙PLC 电机控制 限位
  • ¥30 如何处理shell命令接收到的视频流并实时播放出来
  • ¥15 虚心请教C#的代码优化问题
  • ¥15 有偿求做台风过境全过程模拟仿真