我需要外部化会话存储,所以使用了spring-session。
按照https://github.com/spring-projects/spring-session/blob/master/samples/boot/src/main/java/sample/config/EmbeddedRedisConfiguration.java上的示例,我创建了我的EmbeddedRedisConfiguration
,一切正常。
我决定在预先存在的本地redis服务器的情况下,我需要可选支持来指定Redis可执行路径,因此我已将/resources/config/application.properties
添加到以下键值redis.embedded.executable.path==/path/to/redis
。
我当时的想法是在配置中使用@Value注释,并且可以访问值
static class RedisServerBean implements InitializingBean, DisposableBean, BeanDefinitionRegistryPostProcessor {
private RedisServer redisServer;
@Value("${redis.embedded.executable.path}")
String executablePath;
public void afterPropertiesSet() throws Exception {
if (executablePath != null) {
redisServer = new RedisServer(new File(executablePath), Protocol.DEFAULT_PORT);
} else {
redisServer = new RedisServer(Protocol.DEFAULT_PORT);
}
redisServer.start();
}
public void destroy() throws Exception {
if(redisServer != null) {
redisServer.stop();
}
}
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {}
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {}
}
但是,executablePath
始终为空。如您所知,如果您在@Value
类或同等级别中使用@Service
,则会填充该值。
我假设在加载属性的bean之前调用此配置,但我也知道这是可能的,因为例如@DatasourceAutoConfiguration
可以使用spring.datasource.*
属性
我显然在这里忽略了一些简单的事情。我需要自己的@ConfigurationProperties
答案 0 :(得分:-1)
将您的属性文件更改为:
redis.embedded.executable.path=/path/to/redis