web-dev-qa-db-ja.com

DataSouceBuilderを使用すると、データソースがサポートされなくなります

私はSpring-Batch(および一般的にはSpring)を初めて使用し、このタスクを実行するために必要なことを自分自身に教えるためにオンラインドキュメントをフォローしています。 DB2データベースに接続しようとしています。

次のように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;
    }

それは完璧に動作します。ただし、例が示すようにDataSourceBuilderを使用したいので、最終的には次のようになります。

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

しかし、何らかの理由でそれは機能しません。私は得る

原因:Java.lang.IllegalStateException:サポートされているデータソースタイプが見つかりません

私も試しました:

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;      
}

そして、私は同じエラーを受け取ります。デバッガーで実行すると、.build()でエラーが発生していることがわかります。

簡単なものが欠けていると思いますが、理解できません。

11
VydorScope

M.Deinumがそれに答えました。依存関係からcommons-dbcpがありませんでした!そんな簡単なことだと思いました。

DataSourceBuilderを使用するには、クラスパスにcommons-dbcp、またはTomcat-jdbcまたはhikaricpが必要です。そうでない場合は機能しません。私はあなたがあなたが得るようにあなたがメッセージを受け取るそれらの1つを持っていません。

14
VydorScope

私の場合、追加spring-boot-starter-jdbc依存関係は機能します:

   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
   </dependency>
11
Vincent