我有一个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
属性,并显示错误“无法为字段定义作用域”
还有其他方法可以使字段在会话范围内吗?
答案 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版本