【问题标题】:Inject environment variable to annotation value with Spring使用 Spring 将环境变量注入注释值
【发布时间】:2018-06-26 07:21:32
【问题描述】:

我使用 Spring 4。 我像这样运行 Spring 上下文:

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
    context.scan(BASE_PACKAGE);
    context.refresh();

我使用注入环境变量,例如:

@Value("#{systemEnvironment['ENV_VAR'] ?: 60}")
private int someDelay;

而且效果很好。

问题是如何做到这一点:

@Scheduled(fixedDelayString = "${ENV_VAR ?: 60000}")
public void runSomeTask(){
    System.out.println("hello ");
}

现在 spring 抛出异常:

Initialization of bean failed; nested exception is java.lang.IllegalStateException: Encountered invalid @Scheduled method 'runSomeTask': Invalid fixedDelayString value "${ENV_VAR ?: 60000}" - cannot parse into integer

我想我需要创建一个负责处理此类值的 BeanPostProcessor,但我不知道具体是哪一个。

附:开箱即用的 Spring Boot 可以正常工作。

【问题讨论】:

  • Scheduled(fixedDelayString = "("#{systemEnvironment['ENV_VAR'] ?: 60000}") 有什么问题?
  • @Jens 与"${ENV_VAR ?: 60000}" 相同的异常
  • 能否显示异常文本
  • 或者,你可以这样做stackoverflow.com/a/2602676/1654233
  • @Jens Initialization of bean failed; nested exception is java.lang.IllegalStateException: Encountered invalid @Scheduled method 'runSomeTask': Invalid fixedDelayString value "#{systemEnvironment['ENV_VAR'] ?: 60000}" - cannot parse into integer

标签: java spring


【解决方案1】:

试试这个:

#{'${ENV_VAR}' == null ? '60000' : '${ENV_VAR}' }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2013-05-26
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    相关资源
    最近更新 更多