我成功地通过替换BASIC auth将OAuth2集成到我以前的应用程序(REST服务)。
然后我得到以下例外:
No qualifying bean of type [org.springframework.transaction.PlatformTransactionManager] is defined: expected single matching bean but found 2: transactionManagerDB2,transactionManager
当我删除bean transactionManagerDB2
时,它开始正常工作。
我有2个事务管理器,因为我有2个连接的数据库。
由于我有一个InMemoryTokenStore
,我对TransactionManager
的要求感到好奇。 (以及为什么Oauth无法接受" transactionManager"默认名称)
不知怎的,我已经通过configureGlobal(AuthenticationManagerBuilder auth){}
配置了一个CustomeUserDetailService,它在使用单个TransactionManager之前工作正常。
我使用sparklr-boot Spring Boot应用程序将OAuth与我的应用程序集成。 (感谢Dave Syer制作如此简单易懂的示例)
我正在使用:
答案 0 :(得分:0)
问题是DefaultTokenServices中的方法是用@Transactional注释的。因此,即使您不使用数据库,也需要在授权服务器配置中添加这样的事务管理器bean:
@Bean
public PlatformTransactionManager annotationDrivenTransactionManager() {
return new ResourceTransactionManager() {
@Override
public Object getResourceFactory() {
return null;
}
@Override
public TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException {
return null;
}
@Override
public void commit(TransactionStatus status) throws TransactionException {
}
@Override
public void rollback(TransactionStatus status) throws TransactionException {
}
};
}