Spring框架如何通过.properties/.xml/.yml配置文件设置注解参数值
Spring 注解参数从配置文件读取实现方案
实现前提
首先确认你使用的@NewEnableRedisHttpSession注解的处理逻辑,是否内置了Spring Environment占位符解析能力(Spring官方原生的@EnableRedisHttpSession默认支持该特性)。
方案1:注解直接绑定占位符(注解支持解析时使用)
配置代码示例
@Configuration // 格式为${配置key:默认值},冒号后为配置缺失时的兜底值 @NewEnableRedisHttpSession(maxInactiveIntervalInSeconds = "${maxInactiveIntervalInSeconds:1800}") @Import({RedisConfiguration.class}) public class RedisSessionConfig { // 其他业务配置 }
对应配置文件写法
- properties格式(application.properties)
maxInactiveIntervalInSeconds=900
- yml格式(application.yml)
maxInactiveIntervalInSeconds: 900
- xml配置加载外部属性
如果使用xml配置的方式加载属性文件,需要添加属性占位符配置:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations" value="classpath:你的配置文件路径.properties"/> </bean>
方案2:编程式配置(注解不支持占位符解析时使用)
如果@NewEnableRedisHttpSession本身没有实现占位符解析逻辑,可以放弃注解配置,改用手动注册SessionRepository Bean的方式实现参数绑定:
@Configuration @Import({RedisConfiguration.class}) public class RedisSessionConfig { // 从配置文件读取参数值 @Value("${maxInactiveIntervalInSeconds:1800}") private Integer maxInactiveInterval; @Bean public RedisIndexedSessionRepository sessionRepository(RedisConnectionFactory connectionFactory) { RedisIndexedSessionRepository repository = new RedisIndexedSessionRepository(connectionFactory); // 手动设置过期时间 repository.setDefaultMaxInactiveInterval(maxInactiveInterval); return repository; } }
自定义注解支持占位符方案
如果@NewEnableRedisHttpSession是你自己实现的自定义注解,可以在注解的处理逻辑中添加占位符解析代码:
// 注入Spring环境上下文 @Autowired private Environment environment; // 处理注解参数时添加解析逻辑 String rawValue = newEnableRedisHttpSession.maxInactiveIntervalInSeconds(); // 解析占位符 Integer resolvedValue = Integer.parseInt(environment.resolveRequiredPlaceholders(rawValue));
内容的提问来源于stack exchange,提问作者wo4wangle
相关产品推荐
相关产品推荐

