У меня есть CSV-файл, который содержит около 1 миллиона записей.каждая строка, представляющая объект студента.
В слое обслуживания я читаю файл csv и изменяю его на сущность, как показано ниже:
File file = new File("test.csv");
try
{
String csvFile = "test.csv";
BufferedReader br = null;
String line = "";
String cvsSplitBy = ",";
try
{
br = new BufferedReader(new FileReader(csvFile));
while ((line = br.readLine()) != null)
{
// use comma as separator
String[] student = line.split(cvsSplitBy);
System.out
.println("Country [code= " + student[0] + " , name=" + student[1] + "]");
StudentTable st = new StudentTable();
st.setEmplyoee(student[0]);
st.setName(student[1]);
springbootDao.saveStudent(st);
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if (br != null)
{
try
{
br.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
для слоя дао
void saveStudent(StudentTable st)
{
getSession();
session.save(st);
session.beginTransaction().commit();
}
private Session getSession()
{
if (session == null)
{
session = entity.unwrap(SessionFactory.class).openSession();
}
return session;
}
Когда я пытаюсь сохранить его, он экономит 1 миллион раз, скажем, сохранить для каждой строки, которая должна соответствовать логике.
Очевидно, что это не очень хороший способ.Могу ли я в любом случае оптимизировать его, используя несколько потоков, чтобы повысить скорость, поскольку очевидно, что отдельный поток займет больше времени, или любой метод в спящем режиме, который я могу использовать для сброса данных для повышения скорости?
больше обновлений:
Я изменил его на
while ((line = br.readLine()) != null)
{
// use comma as separator
String[] student = line.split(cvsSplitBy); //java.lang.OutOfMemoryError: Java heap space
StudentTable st = new StudentTable();
st.setEmplyoee(student[0]);
st.setName(student[1]);
stList.add(st);
}
springbootDao.saveStudent(stList);
Теперь я столкнулся с ошибкой памяти