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

我有一个 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 跨会话共享并且计数器不起作用


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


有没有其他方法可以使字段会话作用域?


慕婉清6462132
浏览 175回答 2
2回答

大话西游666

你应该看看Spring-retry使用它,您可以避免管理该状态并使您的组件无状态,因此,使用它Singleton而不是Session-scoped

明月笑刀无情

Two parallel HTTP sessions do not share the changes done in session scoped bean instances.(来源)。您应该在具有此字段的类上方添加 @Scope 会话。然后每个新的 http 会话将获得自己的类实例,从而获得自己的 retryCount 版本
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java