Spring:如何在注解中从配置文件注入Integer与long类型值
解决Spring注解中注入非String类型配置的问题
方法1:使用注解的字符串参数重载版本
Spring的@Scheduled注解专门提供了fixedRateString、initialDelayString这类字符串类型的参数,用来接收配置文件中的字符串值,运行时会自动转换为对应的数值类型,完美解决编译时类型不匹配问题。
修改后的代码:
@Scheduled(fixedRateString = "${scheduler.fixedrate:10}") public void init(){}
方法2:通过SpEL表达式手动类型转换
如果遇到的注解没有提供字符串参数版本,可以利用Spring表达式语言(SpEL)将配置的字符串值转换为目标数值类型。
示例代码(转换为long类型):
@Scheduled(fixedRate = #{T(Long).parseLong('${scheduler.fixedrate:10}')}) public void init(){}
如果需要转换为Integer类型,替换为T(Integer).parseInt('${配置键:默认值}')即可。
问题原因说明
直接使用${scheduler.fixedrate:10}注入时,占位符解析结果为String类型,而@Scheduled的fixedRate参数要求long类型,Java编译阶段会触发类型不兼容错误。上述两种方法分别通过注解内置支持和SpEL转换,绕过了编译时的类型检查。
内容的提问来源于stack exchange,提问作者Hamed
相关产品推荐
相关产品推荐

