springboot2.x 中 @Configuration类中,无法使用@Value注入配置,获取的一直为null,此时需要通过Environment来获取,但是配置类需要实现EnvironmentAware接口。
/**
* 实现EnvironmentAware接口的目的是,
* 在@Configuration中无法通过@Value注解注入配置,
* 所以通过Environment获取配置,但是需要实现EnvironmentAware接口
*/
@Configuration
public class ShiroConfig implements EnvironmentAware {
private final String CACHE_KEY = "shiro:cache:";
private final String SESSION_KEY = "shiro:session:";
private final int EXPIRE = 1800;
private Environment environment;
private String host;
private int port;
private int timeout;
private String password;
@Override
public void setEnvironment(Environment environment) {
this.environment = environment;
}
/**
* 初始化redis信息,通过environment获取配置信息,
* 在@configuration中,@value无效
*/
private void initRedis() {
Optional<String> hostOpt = Optional.ofNullable(environment.getProperty("spring.redis.host"));
host = hostOpt.orElse("localhost");
Optional<String> portOpt = Optional.ofNullable(environment.getProperty("spring.redis.port"));
port = Integer.valueOf(portOpt.orElse("6379"));
Optional<String> timeoutOpt = Optional.ofNullable(environment.getProperty("spring.redis.timeout"));
timeout = Integer.valueOf(timeoutOpt.orElse("1000"));
Optional<String> passwordOpt = Optional.ofNullable(environment.getProperty("spring.redis.password"));
password = passwordOpt.orElse("");
}