Springboot 中的 @Value 返回 null

Nic*_*icO 10 java rest spring spring-boot

我有 application.properties,它位于资源中

应用程序属性

hsm.provider=software
hsm.name=TestHsm
hsm.port=3001
hsm.ip=127.0.0.1
hsm.timeout=10000
Run Code Online (Sandbox Code Playgroud)

控制器

@RestController
@RequestMapping("/hsm")
public class Controller {

  @Value("${hsm.ip}")
  private String ip;

  @Value("${hsm.port}")
  private String port;

  @Value("${hsm.name}")
  private String name;

  @Value("${hsm.timeout}")
  private String timeout;

  @Value("${hsm.provider}")
  private String provider;}
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行应用程序时,所有变量都保持为 NULL。我错过了什么?

编辑 这是 src 文件夹的项目结构

src
????main
?   ????java
?   ?   ????com
?   ?       ????xyz
?   ?           ????hsmservice
?   ?               ????hsm
?   ?                   ????api
?   ?                           Application.java
?   ?                           Controller.java
?   ?                           HSM.java
?   ?
?   ????resources
?       ?   application.properties
?       ?
?       ????META-INF
?               plugin.xml
?
????test
    ????java
    ?       LibraryTest.java
    ?
    ????resources
Run Code Online (Sandbox Code Playgroud)

编辑 2 这是应用程序类

@SpringBootApplication
public class Application {  
    public static void main(String[] args) {
       SpringApplication.run(Application.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 12

@Value 有时返回 null 的原因是当您尝试将“application.properties”内容用于静态变量时,这在 Spring 中是不允许的。按照以下步骤操作: https: //mkyong.com/spring/spring-inject-a-value-into-static-variables/ 它应该可以正常工作。


Uro*_* T. 6

从你的包结构来看,这些属性肯定应该被加载。唯一可能的选择是您已经实例化了您的Controller类,new Controller()而不是让 spring 注入类(使用@Autowired或构造函数注入)。


Nic*_*icO 6

好的,我用这个问题的最佳答案解决了它。我将变量和@Values 放在构造函数的签名中,而不是作为类变量。