我的Spring Boot application.properties
文件中有一个自定义的键值对:
jwt.secret=secretkey
我已经在与Runner类相同的目录中为此属性创建了一个配置类:
@Configuration
@ConfigurationProperties(prefix = "jwt")
@PropertySource("classpath:application.properties")
public class JwtProperties {
/**
* Secret key used to sign JSON Web Tokens
*/
private String secret = "";
public String getSecret() {
return secret;
}
public void setSecret(String secret) {
this.secret = secret;
}
}
如预期的那样,我可以使用ServerApplication.java
批注在我的主要Spring运行器类@Value
中访问此值:
@SpringBootApplication
@EnableConfigurationProperties(JwtProperties.class)
public class ServerApplication implements CommandLineRunner {
@Value("${jwt.secret}")
String test;
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
// correctly prints "test is: secretkey"
System.out.println("test is " + test);
}
}
我有一个/security/JwtClient.java
类,我想在其中使用此jwt.secret
属性,但是我无法使用@Value
注释(它始终会产生一个null
字符串):
@Component
public class JwtClient {
@Value("${jwt.secret}")
private String secretKey;
public String buildJWT(Customer customer) {
// incorrectly prints "secret key: null"
System.out.println("secret key: " + secretKey);
// attempts to build JSON Web Token here but secret key is missing
}
}
我已经阅读了许多关于此主题的StackOverflow问题,但几乎所有问题似乎都假设@Value
注释可以在带有@Component
注释的类上正常工作。我在这里想念什么?