替换后台任务的作用域会话bean
在我的Web应用程序中,我有一个有作用域的会话Bean,用于保存连接到底层系统(存储需要发送的底层Web服务访问的SAML)所需的某些凭据信息。
我有这个bean,在调用web-serivce之前,在正确的地方注入证书。
@Autowired
private MyScopedSession myScopedSession;
@Autowired
private SomeWebService someWebService;
public void someCall() {
...
injectSamlPart
...
}
我想添加后台任务(一个战争打包web应用+一些后台任务),每小时运行一次,我使用一个调度器。 问题是这个后台任务不能使用scoped-session bean(这是有道理的,因为它不是由http请求驱动的)。 所以我得到这样的错误:
Scope 'session' is not active for the current thread;
但是我想为我的后台任务定义一个静态证书(例如,定义一个系统帐户等),并为后台任务定义一种替代bean MyScopedSession,以便自动装配工作。 这可能吗?
当然,我可以做的是将我的bean定义为
@Autowired
private SomeWebService someWebService;
public void someCall(MyScopedSession myScopeSession) {
...
injectSamlPart
...
}
但我不喜欢这么多,因为我不想通过我的所有业务服务参数凭证(可能是10层豆,直到我的后台任务,或者我的rpc调用)
是否有任何解决方案或体系结构更改可以推荐?
如果您计划任务的春天上下文中触发,您可以注册Session
范围为ThreadScope
具有小于两个LOC
ConfigurableBeanFactory factory = applicationContext.getBeanFactory();
factory.registerScope(WebApplicationContext.SCOPE_SESSION,
new SimpleThreadScope());
这应该在应用程序的启动/初始化(即后台任务)时完成,并且应该是您的Web应用程序独占的 。
请参阅这里和这里的相关Java文档。
链接地址: http://www.djcxy.com/p/38929.html