0

在我的 Spring Cloud Task 项目中,我使用的是 Spring Batch。我想将元数据(BATCH_TASK_表)从生产数据中分离出来,所以我配置了两个 DataSource,如下所示:

# 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...

当我运行它时,我是Cannot cast com.microsoft.sqlserver.jdbc.SQLServerDriver to javax.sql.DataSourcetaskConfigurerbean 中获取的。我错过了什么吗?

使用 Spring Boot starter Batch2.0.0.RELEASE和 Cloud starter Task2.0.0.M3

4

2 回答 2

1

利用 prod.datasource.driverClassName

代替

prod.datasource.data-source-class-name
于 2018-03-27T13:40:00.930 回答
1

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

使用实现javax.sql.DataSource诸如com.microsoft.sqlserver.jdbc.SQLServerDataSource.

或者你甚至可以使用一种替代方法DataSource,比如 pooled DataSourcelikecom.mchange.v2.c3p0.ComboPooledDataSource

于 2018-03-27T13:44:23.290 回答