创建一个简单的作业弹簧靴

问题描述 投票:1回答:1

我创建了一个Spring Boot项目。我在弹性搜索中使用spring数据。整个管道:控制器->服务->存储库已准备就绪。

我现在有一个代表国家对象(名称和isoCode)的文件,我想创建一个作业以将它们全部插入弹性搜索中。我阅读了Spring文档,发现对于这样一个简单的工作,配置太多了。因此,我正在尝试做一个简单的主要“工作”,该工作可读取csv,创建对象并将其插入到弹性搜索中。

但是我在这种情况下难以理解注入将如何工作:

@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
        }
    }
}
}
java spring spring-boot elasticsearch jobs
1个回答
0
投票

根据西蒙的评论。这是我解决问题的方式。可能会帮助即将进入春天并努力避免迷路的人们。基本上,要在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);
        }
    }
}


}
© www.soinside.com 2019 - 2024. All rights reserved.