无法将 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
在我的 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