4

的排位豆我能夠成功通過更換基本身份驗證到OAuth2集成到我以前的應用程序(REST服務)。春天的OAuth - 無型的PlatformTransactionManager

然後我得到了以下異常:

No qualifying bean of type [org.springframework.transaction.PlatformTransactionManager] is defined: expected single matching bean but found 2: transactionManagerDB2,transactionManager 

當我刪除豆transactionManagerDB2它開始工作的罰款。 我有2個事務管理器,因爲我有2個連接的數據庫。

因爲我有一個InMemoryTokenStore,我很好奇的需要TransactionManager的。 (以及爲什麼Oauth不能通過默認名稱獲取「transactionManager」)

不知何故,我通過configureGlobal(AuthenticationManagerBuilder auth){}配置了一個CustomeUserDetailService,它在單個TransactionManager之前工作正常,現在正在使用單個TransactionManager。

我用sparklr-boot春天啓動應用程序到OAuth與我的應用程序集成。 (感謝Dave Syer做出這樣簡單易懂的例子)

我使用:

  • 春4.2.5
  • 春季安全4.0.4
  • 春天的OAuth 2.0.9
  • (無彈簧啓動)

回答

0

問題是DefaultTokenServices中的方法是註釋d與@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 { 

      } 
     }; 
    }