无法在Spring Boot组件中访问application.yml属性

huangapple go评论84阅读模式
英文:

Not able to access application.yml properties in springboot component

问题

以下是翻译好的部分:

我有一个 application.yml 文件,其中包含以下属性:

NAME:
   CLASS:
     ID: ABC123456

这是我的 Spring Boot 组件类:

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;

@Component
@Slf4j
public class ProcessMe {

    @Value("${NAME.CLASS.ID}")
    String StuId;

    public boolean IsRightOrWrong() {
        System.out.println(StuId);
    }
}

在上面的组件中,System.out.println(StuId); 总是显示为 null。当我尝试使用 Junit 测试类调用此函数时,上述代码有什么问题?

英文:

I have an application.yml file which contains properties as below

NAME:
   CLASS:
     ID: ABC123456

and here is my spring boot component class

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;

@Component
@Slf4j
public class  ProcessMe {

@Value("${NAME.CLASS.ID}")
String StuId;

public boolean IsRightOrWrong(){
   	System.out.println(StuId);
}
}

In above componenent System.out.println(StuId); is always coming as null. When i am tying to call this function using Junit test class. What's wrong in the above code?

答案1

得分: 1

我认为可以在构造函数中这样定义解决方案:

@Component
@Slf4j
public class ProcessMe {

    String StuId;

    @Autowired
    ProcessMe(@Value("${NAME.CLASS.ID}") String StuId) {
        this.StuId = StuId;
    }
    
    public boolean IsRightOrWrong(){
        System.out.println(this.StuId);
    }
}
    
希望有帮助
英文:

I suppose this solution to define in constructor like

@Component
@Slf4j
public class  ProcessMe {

String StuId;

@Autowired
ProcessMe(@Value("${NAME.CLASS.ID}") String StuId) {
    this.StuId = StuId;
}
public boolean IsRightOrWrong(){
    System.out.println(this.StuId);
}
}

Hope useful

答案2

得分: 0

如果您能够启动该应用程序,那么我相信您的配置是正确的。我的意思是 StuId 有一些值。

问题是您如何测试 当我尝试使用 Junit 测试类调用此函数时。上面的代码有什么问题?

看起来您是从单元测试中调用的。那么您需要将 application.yaml 克隆到测试配置文件,这样您的测试容器才能读取数据,否则您需要模拟配置。

顺便说一下:Java 对象属性应该使用驼峰命名法 哈哈。

英文:

If you can start the application then I believe that your configuration is correct. I mean that StuId have some value.

The problem is how you testing When i am tying to call this function using Junit test class. What's wrong in the above code?

It seems that you're calling from the unit test. Then you need to clone application.yaml to test profile then your test container can read data, otherwise you have to mock your configuration.

btw: Java Object property should using camel case lol

huangapple
  • 本文由 发表于 2020年9月25日 03:38:26
  • 转载请务必保留本文链接:https://go.coder-hub.com/64053274.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定