@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class PreferredDatabaseSession implements Serializable {
private DatabaseEnvironment preferredDb;
public DatabaseEnvironment getPreferredDb() {
return preferredDb;
}
public void setPreferredDb(DatabaseEnvironment preferredDb) {
this.preferredDb = preferredDb;
}
}
我把它叫做:
public class DataSourceRouter extends AbstractRoutingDataSource {
@Autowired
private PreferredDatabaseSession db;
@Override
protected Object determineCurrentLookupKey() {
return db.getPreferredDb();
}
}
也从这里打电话:
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private PreferredDatabaseSession userDatabaseSession;
private void setPreferredDatabase() throws DataAccessException {
// String preferredDb = (String) request.getSession().getAttribute("preferredDb");
String preferredDb = request.getParameter("preferredDb");
if (preferredDb.equals(Constants.JPLATFORM)) {
userDatabaseSession.setPreferredDb(DatabaseEnvironment.JPLATFORM);
} else if (preferredDb.equals(Constants.TIGER)) {
userDatabaseSession.setPreferredDb(DatabaseEnvironment.TIGER);
}
}
}
UserDetailsServiceImpl是一个单例bean,但HttpServletRequest是一个请求范围bean,这就是异常的原因。
尝试使用
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
而不是自动调用HttpServletRequest
@Override
protected Object determineCurrentLookupKey() {
if (RequestContextHolder.getRequestAttributes() == null) {
return DEFAULT_ONE;
}
return db.getPreferredDb();
}
当批处理在服务器启动时运行时不会出现上述异常。但只有在24小时后调用批处理时才会发生。为什么会这样?如果出现异常,那么即使批处理在(IBM websphere)服务器启动时运行,也应该出现异常。为什么会话在服务器启动时可用,甚至在应用程序完全启动之前,没有人使用它? 在我们将bean定义为会话/请求范围的地方,但我们在服务器启动期间使用这些beans(还没有发出会话或请求),为什么spring不会
null 这个错误的原因是什么,难道我们不能有2@ControllerAdvice注释类吗?当我在RegistrationBaseController.java中注释@ControllerAdvice时,它执行得很好。
我试图在Spring Framework 4.2.3上使用Spring Security 3.2.5的Spring Boot 1.3.0应用程序中实现OpenId Connect登录。实现与以下问题非常相似:用oauth2保护REST API:Error创建名为'scopedtarget.oauth2ClientContext'的bean:Scope'session'不是活动的,除了我为实现了建议
为了在请求、会话和全局会话级别支持bean的范围(Web范围bean),在定义bean之前需要进行一些次要的初始配置。 我在中添加了以下内容,如文档所示: 2.将bean限定为依赖项 org.springframework.beans.factory.BeanCreationException:创建名为“ScopedTarget.ReportBuilder”的bean时出错:当前线程的作用域“se
当前线程的作用域“请求”未处于活动状态;如果您想从一个单体引用它,请考虑为这个bean定义一个作用域代理;嵌套的异常是java。lang.IllegalStateException:未找到线程绑定请求:您是指实际web请求之外的请求属性,还是在原始接收线程之外处理请求?如果您实际上在web请求中操作,并且仍然收到此消息,那么您的代码可能在DispatcherServlet/DispatcherPo
在我的Spring批处理配置中,我试图设置一个分区步骤,该步骤访问JobParameters中的值,如下所示: 我已经将@EnableBatchProcessing注释添加到我的SpringBoot应用程序中。 但是如果我在partitionStep上使用StepScope注释,我会得到 创建名为“ScopedTarget.PartitionStep”的bean时出错:当前线程的作用域“step”