在 Spring 引导中无法在 @bean 中使用 @value

Not Able to use @value inside @bean in Spring boot

您好,我正在使用 spring 2.4 版本并从 spring cloud

伪造云

但是当我从 属性 文件

中读取时,我卡住了,无法在 @bean 方法中使用一些常量值
@Configuration
public class FeignClientConfiguration {

    @Value("${app.basic.auth.username}")
    private static String userName;

    @Value("${app.basic.auth.password}")
    private static String password;


    @Bean
    public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
        // return new BasicAuthRequestInterceptor("admin", "admin");
        return new BasicAuthRequestInterceptor(userName, password);
    }
}

但是我虽然提供了这样的价值,但我会工作得很好

return new BasicAuthRequestInterceptor("admin", "admin");

我不确定为什么这行不通,你能给我一些建议吗?

找出答案的最佳方法是创建一个简单的 @PostConstruct 方法并打印两个值..如果它们是 null 那么这意味着 spring 无法解析那些 属性 值。

确保您已使用 PropertyPlaceholderConfigurer 初始化属性并且 属性 文件的路径正确(即使相对于类路径)。

密切关注日志,不要忽略任何异常。

您应该将配置 class 和 basicAuthRequestInterceptor 方法分开。

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "app")    
public class LoginProperties {

    private String username;
    private String password;    
}

在您的属性文件中,具有以下内容:

app.username = user
app.password = 123

然后在您的 controller/service class 中执行以下操作。

@Autowired
private LoginProperties loginProperties; 

public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
        return new BasicAuthRequestInterceptor(loginProperties.getUserName(), loginProperties.password());
    }