我有一个springbatch应用程序,我将连接到一个网络数据库进行阅读。我发现的大多数示例都嵌入了用于独立测试的数据库。我不想那样做。我不确定配置是否相似。以下是我所拥有的东西中最具德国特色的部分(带有一些异议):
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
private static final String GET_DATA =
"SELECT " +
"stuffA, " +
"stuffB, " +
"FROM STUFF_TABLE " +
"ORDER BY stuffA ASC";
@Bean
public ItemReader<StuffDto> itemReader(DataSource dataSource) {
return new JdbcCursorItemReaderBuilder<StuffDto>()
.name("cursorItemReader")
.dataSource(dataSource)
.sql(GET_DATA)
.rowMapper(new BeanPropertyRowMapper<>(StuffDto.class))
.build();
}
....
,然后从应用程序启动:
@SpringBootApplication
@EnableBatchProcessing
public class BatchApplication {
public static void main(String[] args) {
SpringApplication.run(BatchApplication.class, args);
}
}
我没有配置数据源。我不确定,因为我的基本上只是一个到远程网络数据库的客户端连接,它的配置是否与我找到的各种示例的嵌入式设置不同。所以我很自然地得到了错误(见下文)。我只是在寻找一个简单的配置来示例化连接到远程数据库的数据源。
谢谢你的回复
. . .
启动applicationcontext时出错。要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2020-08-21 13:18:09.773错误1220---[main]o.s.b.d.LoggingFailureAnalysis报告程序:
应用程序启动失败
说明:
java.main.configuration.configuration.batchconfig中方法itemreader的参数0需要找不到类型为“javax.sql.datasource”的bean。
找到了以下候选对象,但无法注入:-未加载“jndidatasourceautoconfiguration”中的bean方法“datasource”,因为@conditionalonproperty(spring.datasource.jndi name)未找到属性“jndi name”-未加载“XadasourceAutoConfiguration”中的bean方法“datasource”,因为@conditionalonclass未找到属性“jndi name”必需类“javax.transaction.transactionmanager”
行动:
考虑重新访问上面的条目,或者在配置中定义一个“javax.sql.datasource”类型的bean。
1条答案
按热度按时间daolsyd01#
一
javax.sql.DataSource
是对远程/本地/嵌入式数据源的抽象。因此,您可以在何处将jdbc连接字符串设置为远程数据库主机是一个配置问题。下面是一个远程mysql数据源的示例:spring批处理与
DataSource
对象,不(也不应该)知道它是本地的、远程的还是嵌入的。