无法将 SQLServerDriver 转换为 DataSource

Cannot cast SQLServerDriver to DataSource

在我的 Spring Cloud Task 项目中,我正在使用 Spring Batch。我想将元数据(BATCH_TASK_ 表)与生产数据分开,所以我配置了两个这样的数据源:

# DataSource: Production data
prod.datasource.jdbc-url=jdbc:sqlserver://localhost;databaseName=PROD
prod.datasource.data-source-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
prod.datasource.username=...
prod.datasource.password=...


# DataSource: Jobs and Tasks metadata
tasks.datasource.jdbc-url=jdbc:sqlserver://localhost;databaseName=TASKS
tasks.datasource.data-source-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
tasks.datasource.username=sa
tasks.datasource.password=...

+

public class DataSourceConfig {

    @Bean
    @Primary
    @ConfigurationProperties(prefix = "prod.datasource")
    public DataSource dataSourceProd() {
        return DataSourceBuilder.create().build();
    }


    @Bean
    @ConfigurationProperties(prefix = "tasks.datasource")
    public DataSource dataSourceTasks() {
        return DataSourceBuilder.create().build();
    }

}

+

@Configuration
@EnableTask
@EnableBatchProcessing
@Import(DataSourceConfig.class)
public class JobConfig {

    @Autowired
    private JobBuilderFactory jobs;

    @Autowired
    private StepBuilderFactory steps;


    @Bean
    public TaskConfigurer taskConfigurer(@Qualifier("dataSourceTasks") DataSource source) {
        return new DefaultTaskConfigurer(source);
    }


    @Bean
    public BatchConfigurer batchConfigurer(@Qualifier("dataSourceTasks") DataSource source) {
        return new DefaultBatchConfigurer(source);
    }

    //+jobs, steps...

当我 运行 它时,我从 taskConfigurer bean 中得到 Cannot cast com.microsoft.sqlserver.jdbc.SQLServerDriver to javax.sql.DataSource。我错过了什么吗?

使用 Spring 启动程序批处理 2.0.0.RELEASE 和云启动程序任务 2.0.0.M3

使用 prod.datasource.driverClassName

而不是

prod.datasource.data-source-class-name

com.microsoft.sqlserver.jdbc.SQLServerDriver 没有实现 javax.sql.DataSource 它只是驱动程序。

使用实现 javax.sql.DataSource 的 class,例如 com.microsoft.sqlserver.jdbc.SQLServerDataSource

或者您甚至可以使用替代方案 DataSource,例如像 com.mchange.v2.c3p0.ComboPooledDataSource

这样的合并 DataSource