2017-06-03 8 views
0

私はSpring OAuth Serverサンプルコードにデータベースを追加しようとしています。 ここにdataSourceの設定があります。Spring OAuthサーバーJBDCTokenStoreエラー

@Bean(name = "dataSource") 
public DriverManagerDataSource dataSource() { 
    DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource(); 
    driverManagerDataSource.setDriverClassName("org.mariadb.jdbc.Driver"); 
    driverManagerDataSource.setUrl("jdbc:mariadb://localhost:3306/OAuth"); 
    driverManagerDataSource.setUsername("root"); 
    driverManagerDataSource.setPassword("password"); 
    return driverManagerDataSource; 
} 

そしてEndpointConfig

@Autowired 
    private DataSource dataSource; 

    @Bean 
    public JdbcClientDetailsService clientDetailsService() { 
     return new JdbcClientDetailsService(dataSource); 
    } 

    @Override 
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception { 
     clients.withClientDetails(clientDetailsService()); 
    } 
    @Bean 
    public TokenStore tokenStore() { 
     //return new InMemoryTokenStore(); 
     return new JdbcTokenStore(dataSource); 
    } 
    @Override 
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { 
     endpoints.tokenStore(tokenStore); 
     endpoints.userApprovalHandler(userApprovalHandler); 
     endpoints.authenticationManager(authenticationManager); 
    } 

しかし、私はJbdctokenStore、JdbcClientDetailsS​​ervice作業罰金にエラーが発生します。

エラーメッセージ:java.lang.IllegalArgumentExceptionが:によって引き起こさ

org.springframework.beans.factory.BeanCreationException:データソースは、によって引き起こさ

を必要 エラー名でBeanを作成する 'tokenStore'クラスパスで定義されています リソース [org/springframework/security/oauth/examples/sparklr/config/OAuth2ServerConfig $ AuthorizationServerConfiguration.class]: Beanのインスタンス化に失敗しました。入れ子の例外です org.springframework.beans.factory.BeanDefinitionStoreException: ファクトリメソッド[パブリック org.springframework.security.oauth2.provider.token.TokenStore org.springframework.security.oauth.examples.sparklr.config.OAuth2ServerConfig $ AuthorizationServerConfiguration.tokenStore()] 例外がスローされました。ネストされた例外は java.lang.IllegalArgumentExceptionがある:データソースは、私が起こるかを把握できなかった

を必要としていました。 データベースと表は、すべての罰金です。(私はサンプルを与えたSQLファイルを使用します。)


 @Bean 
    public TokenStore tokenStore() { 
     //return new InMemoryTokenStore(); 
     return new JdbcTokenStore(dataSource()); 

    } 

    @Bean 
    public DriverManagerDataSource dataSource() { 
     DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource(); 
     driverManagerDataSource.setDriverClassName("org.mariadb.jdbc.Driver"); 
     driverManagerDataSource.setUrl("jdbc:mariadb://localhost:3306/OAuth"); 
     driverManagerDataSource.setUsername("root"); 
     driverManagerDataSource.setPassword("a89019"); 
     return driverManagerDataSource; 
    } 

私はデータソース()、 へと変化するデータソースの下に新しいBeanを追加し、それが動作します。 JdbcClientDetailsS​​erviceがorignalで動作する理由はわかりません。 しかし、JdbcTokenStoreには新しいものが必要です。 どのようにしてこのコード部分を変更できますか?コードは重複したコードのために乱雑に見えます。

+0

'JdbcTokenStore'クラスに' @Configuration'アノテーションがありますか? – harshavmb

+0

いいえ、私はそれの下に重複したコードを追加してエラーを解決します。なぜそれが機能するのかわかりません。 –

答えて

0

データソースBeanを@Primaryとマークしてください。詳細はこちらをご覧ください:77. Data Access

+0

同じエラーです。奇妙な... –

関連する問題