【问题标题】:Cannot cast SQLServerDriver to DataSource无法将 SQLServerDriver 强制转换为 DataSource
【发布时间】:2018-09-05 22:17:49
【问题描述】:

在我的 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...

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

使用 Spring Boot starter Batch 2.0.0.RELEASE 和 Cloud starter Task 2.0.0.M3

【问题讨论】:

    标签: java spring-batch spring-cloud-task


    【解决方案1】:

    使用 prod.datasource.driverClassName

    而不是

    prod.datasource.data-source-class-name
    

    【讨论】:

    • 起初我使用的是datasource.url,它叫我使用datasource.jdbc-url,我发现它来自database.hikari 属性。然后我探索了这些光属性,我看到有data-source-class-name 所以我猜我应该用它来与光属性“同步”。有点混乱。
    • 它似乎无法初始化架构:Failed to start bean 'taskLifecycleListener';....Could not increment identity;....Invalid object name 'TASK_SEQ'
    • 是 TASK_SEQ 是否存在于数据库中
    • 不,没有任何 TASK_ 表或 BATCH_
    【解决方案2】:

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

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

    或者您甚至可以使用替代的DataSource,例如池化的DataSource,例如com.mchange.v2.c3p0.ComboPooledDataSource

    【讨论】:

      猜你喜欢
      • 2018-05-12
      • 2023-03-17
      • 2012-12-08
      • 2013-03-07
      • 2015-06-16
      • 2021-06-09
      • 2017-04-28
      • 1970-01-01
      • 2022-07-15
      相关资源
      最近更新 更多