刚刚使用Spring-data-jpa设置了我的第一个Spring-bact项目。我在开发环境中有一个有效的解决方案,通过我的ItemReader中的Oracle db,我在我的处理器中对oracle db的一些行消耗一些XML/HTML,然后使用自定义将每个提取的HTML输出到单个文件中itemwriter。(每行1个文件(
我的数据源是通过启动项目(application.properties(中的spring-data-jpa配置的...
我注意到OOTB Spring Batch使用可用数据源创建了其Jobrepository的各种模式对象。
在开发环境中这很好,但是我在生产Oracle DB环境中只有"读取"访问权限,我的ItemReader将获得其官方数据。
我尝试配置我遇到的春季文档中概述的2个数据源..但无法正常工作。我还尝试使用内存中的内存,但也无法正常工作。
所以这可能吗?或者我应该继续插上内存工作回购工作吗?
我目前不太关心重新启动性。.批处理作业将在我的桌面上作为独立的Spring-Boot应用程序运行。
任何帮助,提示,信息将不胜感激。
更新:
尝试内存配置,这是我的批处理配置类的一部分:
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
private static final Logger log = LoggerFactory.getLogger(BatchConfiguration.class);
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
EntityManagerFactory emf;
@Bean
public SimpleJobLauncher jobLauncher(JobRepository jobRepository) {
SimpleJobLauncher simpleJobLauncher = new SimpleJobLauncher();
simpleJobLauncher.setJobRepository(jobRepository);
return simpleJobLauncher;
}
@Bean
public JobRepository jobRepository(ResourcelessTransactionManager transactionManager) throws Exception {
MapJobRepositoryFactoryBean mapJobRepositoryFactoryBean = new MapJobRepositoryFactoryBean(transactionManager);
mapJobRepositoryFactoryBean.setTransactionManager(transactionManager);
return mapJobRepositoryFactoryBean.getObject();
}
@Bean
public ResourcelessTransactionManager transactionManager() {
return new ResourcelessTransactionManager();
}
项目编译还可以,但是当我运行时,我会得到以下内容:
由:org.springframework.jdbc.badsqlgrammarexception:repardstatementCallback;糟糕的sql语法[select job_instance_id,job_name来自batch_job_instance where job_name =?订购Job_instance_id desc];嵌套异常是java.sql.sqlsyntaxerrorexception:ora-00942:表或视图不存在
因此,它似乎仍在尝试连接到甲骨文,而不是使用内存DB ..
好吧...看来此配置对我的情况有了技巧。
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
private static final Logger log = LoggerFactory.getLogger(BatchConfiguration.class);
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
EntityManagerFactory emf;
@Bean
public SimpleJobLauncher jobLauncher(JobRepository jobRepository) throws Exception {
SimpleJobLauncher simpleJobLauncher = new SimpleJobLauncher();
simpleJobLauncher.setJobRepository(jobRepository);
simpleJobLauncher.afterPropertiesSet();
return simpleJobLauncher;
}
@Bean
public MapJobRepositoryFactoryBean mapJobRepositoryFactory(ResourcelessTransactionManager txManager)
throws Exception {
MapJobRepositoryFactoryBean factory = new MapJobRepositoryFactoryBean(txManager);
factory.afterPropertiesSet();
return factory;
}
@Bean
public JobRepository jobRepository(MapJobRepositoryFactoryBean factory) throws Exception {
return factory.getObject();
}
@Bean
public ResourcelessTransactionManager resourcelessTransactionManager() {
return new ResourcelessTransactionManager();
}
@Bean
public JobExplorer jobExplorer(MapJobRepositoryFactoryBean factory) {
return new SimpleJobExplorer(factory.getJobInstanceDao(), factory.getJobExecutionDao(),
factory.getStepExecutionDao(), factory.getExecutionContextDao());
}