weixin_48050721
weixin_48050721
2021-02-08 13:13
采纳率: 20%
浏览 496
已采纳

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条回答 默认 最新

  • ory001
    格一物 2021-02-08 17:16
    已采纳

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

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

    studenting:

    id: 1

    name: liuyupeng

    点赞 1 评论
  • weixin_48050721
    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
    a1767028198 2021-02-08 13:32

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

    点赞 评论
  • tl732343563
    _寻隐者不遇 2021-02-08 13:49

    使用@value注解

    点赞 评论
  • Haoyong_Chen
    Haoyong_Chen 2021-02-08 14:18

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

    点赞 评论
  • qq_36911145
    封印di恶魔 2021-02-08 15:41

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

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

    你的是

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

    private String studentingName;

    这样就可以取到

    但是记住 studenting靠近前面

    点赞 评论
  • xionglangs
    编程爱好者熊浪 2021-02-08 17:45

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

    点赞 评论
  • weixin_44186072
    Energy-郑能量 2021-02-08 18:01

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

    点赞 评论
  • weixin_39053702
    保质期已过 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);
        }
    }

    测试结果

     

     

    点赞 评论

相关推荐