Постоянное сохранение данных с помощью спящего режима в цикле while - PullRequest
0 голосов
/ 07 декабря 2018

Я читаю из файла и пытаюсь сохранить все данные, используя jpa, в mysql db. Мой метод readandLoad выглядит следующим образом:

@Service
public class ReadLoadLog {

    @Autowired
    private LogbeanRepository logbeanRepository;

    public void readFile(LogBean logBean) throws IOException {

        Scanner read = new Scanner(
            new File(
                "/src/main/resources/access.txt"));

        while (read.hasNext()) { //checks if there is a valid token

            String string = read.nextLine();
            System.out.println(string);

            Scanner readFileByLine = new Scanner(string);

            while (readFileByLine.hasNext()) { //checks valid token if not then goes out of loop
                String[] split = readFileByLine.nextLine().split("\\|");

                logBean.setDateTime(LocalDateTime.parse(split[0], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")));
                logBean.setIp_address(split[1]);
                logBean.setRequest(split[2]);
                logBean.setStatus(split[3]);
                logBean.setUserAgent(split[4]);
            }
            logbeanRepository.save(logBean);
        }
    }
}

Я запускаю это с помощью весенней загрузки с помощью команды LineRunner (). У меня естьСвойства mysql объявлены в app.properties в моей базе данных. Я получаю только три новых идентификатора, но у меня есть более тысячи данных, когда я нажимаю на кнопку «Выполнить выборку из таблицы» в моей рабочей среде mysql, я получаю разные данные, но эти три идентификатора 1,2,3, поэтомуКажется, что данные загружаются в БД, но теперь расположены в соответствии с первичным ключом, который я установил

'1', '2017-01-01 18:25:55', '192.168.97.208', '\"GET / HTTP/1.1\"', '200', '\"Mozilla/5.0 (Linux; Android 7.0; Moto G (4) Build/NPJS25.93-14-8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.116 Mobile Safari/537.36\"'
'2', '2017-01-01 18:01:27', '192.168.45.70', '\"GET / HTTP/1.1\"', '200', '\"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0\"'
'3', '2017-01-01 09:41:38', '192.168.87.47', '\"GET / HTTP/1.1\"', '200', '\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36\"'

@Entity
public class LogBean {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private LocalDateTime dateTime;

    private String ip_address;

    private String request;

    private String status;

    private String userAgent;

Это мой основной класс

@SpringBootApplication
public class ParserprojectApplication implements CommandLineRunner   {

    @Autowired
    LogbeanRepository logbeanRepository;

    @Autowired
    ReadLoadLog readLoadLog;

    private Logger LOGGER = LogManager.getLogger();

    public static void main(String[] args) {
        SpringApplication.run(ParserprojectApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        LOGGER.debug("run(args)", args);

        LogBean logBean = new LogBean();
        readLoadLog.readFile(logBean);
    }

Я хочу получить все считанные данныепоэтому я должен получить более тысячи данных с уникальным первичным ключом, вместо этого я получаю данные, но они все, 1,2,3 ключа

1 Ответ

0 голосов
/ 07 декабря 2018

вам нужно создать новый экземпляр LogBean для каждой прочитанной строки, в противном случае он будет перезаписывать предыдущий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...