Невозможно привести SQLServerDriver к источнику данных.

В моем проекте 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...

Когда я запускаю его, я получаю Cannot cast com.microsoft.sqlserver.jdbc.SQLServerDriver to javax.sql.DataSource от taskConfigurer боб. Я что-то пропустил?

Использование Spring Boot Starter Batch 2.0.0.RELEASE и облачный стартер Task 2.0.0.M3

2 ответа

Решение

Использование prod.datasource.driverClassName

вместо

prod.datasource.data-source-class-name

com.microsoft.sqlserver.jdbc.SQLServerDriver не реализует javax.sql.DataSource это просто водитель.

Используйте класс, который реализует javax.sql.DataSource такие как com.microsoft.sqlserver.jdbc.SQLServerDataSource,

Или вы могли бы даже использовать альтернативу DataSource такой как объединенный DataSource лайк com.mchange.v2.c3p0.ComboPooledDataSource

Другие вопросы по тегам