Я полный новичок в Spring Batch Framework, и я нашел легко понятные коды от http://www.javabeat.net/introduction-to-spring-batch/ для использования в качестве учебных инструментов. Я мой проект создан в Eclipse, похож на коды со страницы, это выглядит следующим образом:Spring Batch CommandLineJobRunner не может найти конфигурационный файл .xml
и код выполняет задания в fileWritingJob.xml с использованием CommandLineJobRunner как так:
package net.javabeat.articles.spring.batch.examples.filewriter;
import org.springframework.batch.core.launch.support.CommandLineJobRunner;
public class Main {
public static void main(String[] args) throws Exception {
CommandLineJobRunner.main(new String[]{"fileWritingJob.xml", "LayeredMultiThreadJobTest"});
}
}
, и он работает как ожидалось без проблем. Но когда я перемещаю fileWritingJob.xml в другой каталог (все еще под проектом dir), он не запускается. Я попытался изменить аргументы имени файла в методе CommandLineJobRunner, используя относительный и полный путь, но он все еще не работает. Например, если создать каталог в каталоге проекта (тот же уровень, как конфигурации) с именем задания и поставить XML там затем передать FilePath в CommandLineJobRunner так:
CommandLineJobRunner.main(new String[]{"/jobs/fileWritingJob.xml", "LayeredMultiThreadJobTest"});
или это
CommandLineJobRunner.main(new String[]{"../jobs/fileWritingJob.xml", "LayeredMultiThreadJobTest"});
это не работает.
Но когда я попытался создать подкаталог в директории конфигурации и поставить fileWritingJob.xml там, как этот
CommandLineJobRunner.main(new String[]{"configsubdir/fileWritingJob.xml", "LayeredMultiThreadJobTest"});
он работает. Это как если CommandLineJobRunner проверяет только каталог config.
У меня заканчиваются идеи, может ли кто-нибудь мне помочь?
ОБНОВЛЕНИЕ: после небольшого поиска, благодаря предложению Майкла Минеллы о ClassPathXmlApplicationContext, я могу разместить xml везде, где захочу. Я также консультировался на эту страницу Spring cannot find bean xml configuration file when it does exist и http://www.mkyong.com/spring-batch/spring-batch-hello-world-example/
Так что я теперь объявить новый контекст, используя затем ClassPathXmlApplicationContextand запустить его с помощью задания запуска, вот как:
public static void main(String[] args) {
String[] springConfig =
{
"file:/path/to/xml/file"
};
ApplicationContext context = new ClassPathXmlApplicationContext(springConfig);
JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher");
Job job = (Job) context.getBean("JobName");
try {
JobExecution execution = jobLauncher.run(job, new JobParameters());
System.out.println("Exit Status : " + execution.getStatus());
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Done");
}
Большое спасибо за все ваши входы!
, может быть, я был неясен. Он работает, если я помещаю xml в директорию config и его subdir. Он не работает, когда я перемещаю файл, а затем передаю путь к файлу CommandLineJobRunner. Я попробую проверить путь к классам, может быть, это даст мне подсказку. Спасибо за ваш совет! – akiortagem