使用DataSouceBuilder时,我得到DataSource Not Supported

Vyd*_*ope 7 java spring spring-batch

我是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>
Run Code Online (Sandbox Code Playgroud)

然后将其加载到我的代码中,如下所示:

@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;
    }
Run Code Online (Sandbox Code Playgroud)

它完美地运作.我想如何使用DataSourceBuilder这样的示例显示最终我想要:

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

但由于某种原因,这是行不通的.我明白了

引起:java.lang.IllegalStateException:找不到支持的DataSource类型

我也尝试过:

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;      
}
Run Code Online (Sandbox Code Playgroud)

我得到了同样的错误.如果我在调试器中运行它,我可以看到错误发生在.build()上.

我确信我错过了一些简单的事情,但我无法弄清楚.

Vyd*_*ope 12

M. Deinum回答了这个问题.我错过了我的依赖项中的commons-dbcp!我觉得这很简单.

要使用DataSourceBuilder,您需要在类路径上使用commons-dbcptomcat-jdbchikaricp,否则它将无法工作.我没有你会得到的消息之一.


小智 8

就我而言,添加spring-boot-starter-jdbc依赖项的工作原理是:

   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
   </dependency>
Run Code Online (Sandbox Code Playgroud)

  • 添加 org.springframework.boot:spring-boot-starter-data-jpa 也有帮助。 (2认同)