为什么不能在@SpringBootApplication注释的主文件之外访问application.properties值?

时间:2019-04-17 12:02:43

标签: java spring spring-boot

我的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注释的类上正常工作。我在这里想念什么?

0 个答案:

没有答案