如何使spring @Value属性会话成为作用域

时间:2018-08-12 18:16:31

标签: java spring spring-mvc spring-boot

我有一个application.properties文件,内容如下:

retry.count = 3

哪些注入了Spring MVC控制器

@Value("${retry.count}")
private int retryCount;

try{
  invokeRestCall()
}
catch(TimeOutException ex){
  if(retryCount > 0) {
  retryCount--;
  //Retry call with recursion
  }
}

由于在应用程序加载时注入了retryCount,而不是在会话范围内注入的,因此retryCount在会话之间共享并且计数器无法工作

可以通过@Scope(value="session")定义bean的作用域,但这不适用于@Value属性,并显示错误“无法为字段定义作用域”

还有其他方法可以使字段在会话范围内吗?

2 个答案:

答案 0 :(得分:1)

您应该看看Spring-retry

使用它可以避免管理该状态并使您的组件变为无状态,因此,使其成为> output.txt && type output.txt而不是Singleton

答案 1 :(得分:0)

Two parallel HTTP sessions do not share the changes done in session scoped bean instances.source)。您应该在具有该字段的类上方添加@Scope会话。然后,每个新的http会话将获得其自己的类实例,从而获得其自己的retryCount版本