2016-01-14 7 views
5

私はSpring-Batch(および一般的なSpring)を初めて使用しており、この作業を行うために必要なことを自分で教えるためにライン文書に従っています。私はDB2データベースに接続しようとしています。DataSourceBuilderを使用しているときにDataSourceがサポートされない

私はこのようなXMLとDB2の接続宣言する場合:

<bean id="wcs_dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver" /> 
    <property name="url" value="jdbc:db2://127.0.0.1/DEV" /> 
    <property name="username" value="user" /> 
    <property name="password" value="pass5" /> 
</bean> 

をそのようにように私のコードでそれをロードします。

@Bean 
    public JdbcCursorItemReader<Product> databaseItemReader() {    
     ApplicationContext context = 
       new ClassPathXmlApplicationContext("context-datasource.xml"); 
     DataSource dataSource = (DataSource) context.getBean("wcs_dataSource"); 
     ((ConfigurableApplicationContext)context).close(); 

     JdbcCursorItemReader<Product> result = new JdbcCursorItemReader<Product>(); 
     result.setDataSource(dataSource); 
     result.setSql(sqlString); 
     result.setRowMapper(new ProductRowMapper()); 
     return result; 
    } 

それは完璧に動作します。

@ConfigurationProperties(prefix="DEV.datasource") 
public DataSource Wcs_DataSource(){ 
    return DataSourceBuilder.create().build(); 
} 

しかし、動作しません何らかの理由:どのようにこれまで私は例がそう最終的に私が取得したいと思い示しようDataSourceBuilderを使用したいと思います。

public DriverManagerDataSource dataSource() {    
    DataSourceBuilder DSBuilder = DataSourceBuilder.create(); 
    DSBuilder.url("jdbc:db2://127.0.0.1/DEV"); 
    DSBuilder.username("user"); 
    DSBuilder.password("password"); 
    DSBuilder.driverClassName("com.ibm.db2.jcc.DB2Driver"); 
    DriverManagerDataSource result = (DriverManagerDataSource) DSBuilder.build(); 
    return result;  
} 

と私は同じエラーを取得:いいえ、サポートデータソースの種類は私も試してみました

が見つかりました:java.lang.IllegalStateException:私はによって引き起こさ

を取得します。デバッガで実行すると、エラーが.build()で発生することがわかります。

私は何か簡単なものを見逃していると確信していますが、私はそれを理解できません。

+4

まず 'build'はすべて' DataSource'を返します。これは返すタイプでなければなりません。失敗すると 'DriverManagerDataSource'にキャストしないでください。 'DataSourceBuilder'を使うには、クラスパスに' commons-dbcp'や 'tomcat-jdbc'や' hikaricp'が必要です。それ以外の場合は動作しません。私はあなたが得るようにメッセージを得るそれらの1つを持っていません。もう一つのことは本当にカスタム名前空間( 'DEV.datasource')が必要なのですか?単純にデフォルトを使用しないのはなぜですか? –

+0

複数のデータソースが存在するため、名前空間が存在します。これは私がそれに従っていたドキュメントです: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-data-access.html 私はそれを試していないと同じ結果を持つDriverManagerDataSourceを使用します。私はそれを使っていることを見ている別の方法がありました(その時点でわらをつかんでいました)が、それは助けになりませんでした。私はこれを投稿してから削除しました。 私の依存関係にcommons-dbcpを追加しても問題ありませんでした!ありがとう! – VydorScope

答えて

10

M. Deinumが回答しました。私は自分の依存関係からcommons-dbcpが見つかりませんでした!私はそれがそれのような簡単なものだと考えました。

あなたはそれが動作しません、他のクラスパス上コモンズ-DBCP、または のtomcat-JDBCまたはhikaricpを持っている必要がありますDataSourceBuilderを使用するには。私はあなたが得たときにメッセージを受け取るものを持っていません。

関連する問題