Создать простую работу весенней загрузки - PullRequest
1 голос
/ 11 апреля 2020

Я создал весенний загрузочный проект. Я использую данные весны с elasti c search. Весь конвейер: контроллер -> сервис -> репозиторий готов.

Теперь у меня есть файл, который представляет объекты страны (имя и isoCode), и я хочу создать задание, чтобы вставить их все в поиск elasti c. Я прочитал весеннюю документацию и обнаружил, что для такой простой работы слишком много настроек. Поэтому я пытаюсь выполнить простую основную «работу», которая читает csv, создает объекты и вставляет их в elasti c search.

Но у меня есть небольшая проблема, чтобы понять, как инъекция будет работать в этот случай:

@Component
public class InsertCountriesJob {

private static final String file = "D:path\\to\\countries.dat";
private static final Logger LOG = LoggerFactory.getLogger(InsertCountriesJob.class);

@Autowired
public CountryService service;

public static void main(String[] args) {
    LOG.info("Starting insert countries job");
    try {
        saveCountries();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

public static void saveCountries() throws Exception {
    try (CSVReader csvReader = new CSVReader(new FileReader(file))) {
        String[] values = null;
        while ((values = csvReader.readNext()) != null) {
            String name = values[0];
            String iso = values[1].equals("N") ? values[2] : values[1];
            Country country = new Country(iso, name);
            LOG.info("info: country: {}", country);
            //write in db;
            //service.save(country); <= can't do this because of the injection
        }
    }
}
}

1 Ответ

0 голосов
/ 11 апреля 2020

на основании комментария Саймона. Вот как я решил свою проблему. Может помочь людям, которые вступают в весну, и которые пытаются не потеряться. По сути, чтобы внедрить что-либо в Spring, вам понадобится SpringBootApplication

public class InsertCountriesJob implements CommandLineRunner{

private static final String file = "D:path\\to\\countries.dat";
private static final Logger LOG = LoggerFactory.getLogger(InsertCountriesJob.class);

@Autowired
public CountryService service;

public static void main(String[] args) {
    LOG.info("STARTING THE APPLICATION");
    SpringApplication.run(InsertCountriesJob.class, args);
    LOG.info("APPLICATION FINISHED");
}

@Override
public void run(String... args) throws Exception {
    LOG.info("Starting insert countries job");
    try {
        saveCountry();
    } catch (Exception e) {
        e.printStackTrace();
    }
    LOG.info("job over");
}

public void saveCountry() throws Exception {
    try (CSVReader csvReader = new CSVReader(new FileReader(file))) {
        String[] values = null;
        while ((values = csvReader.readNext()) != null) {
            String name = values[0];
            String iso = values[1].equals("N") ? values[2] : values[1];
            Country country = new Country(iso, name);
            LOG.info("info: country: {}", country);
            //write in db;
            service.save(country);
        }
    }
}


}
...