Я создал приложение командной строки в java, используя springboot, который переносит данные из oracle базы данных в mysql базу данных
Я делаю следующее в классе обслуживания
@Service
public class MyService{
@Autowired
public OracleUserRepository oracleUserRepository;
@Autowired
public OracleUserAddressRepository oracleUserAddressRepository;
@Autowired
public OracleUserDetailsRepository oracleUserDetailsRepository;
@Autowired
public MysqlUserRepository mysqlUserRepository;
@Autowired
public MysqlUserAddressRepository mysqlUserAddressRepository;
@Autowired
public MysqlUserDetailsRepository mysqlUserDetailsRepository;
public void migrateData(){
List<OracleUserEntity> oracelUserEntities=oracleUserRepository.findAll();
for (OracleUserEntiy oracleUserEntity: oracleUserEntities){
migrateEntity(oracleUserEntity);
}
}
@Transactional("mysqlTransactionManager")
public void migrateEntity(OracleUserEntity oracleUserEntity){
OracleUserAddressEntity oracleUserAddressEntity=getAddressEntity(oracleUserEntity);
OracleUserDetailsEntity oracleUserDetailsEntity=getDetailsEntity(oracleDetaislEntity);
MysqlUserEntity mysqlUserEntity=convertToMysqlUserEntity(oracleUserEntity);
mysqlUserRepository.save(mysqlUserEntity);
MysqlUserAddressEntity mysqlUserAddressEntity=convertToMysqlAddressEntity(oracleUserAddressEntity);
mysqlUserAddressRepository.save(mysqlUserAddressEntity);
MysqlUserDetailsEntity mysqlUSerDetailsEntity=convertToMysqlUserDetailsEntity(oracleUserDetailsEntity);
mysqlUserDetailsRepository.save(mysqlUserAddressEntity);
}
}
Я сохраняю каждого пользователя, используя транзакционный , потому что я хочу выполнить откат, если какой-либо из userAddressEntity или userDetailsEntity не может быть сохранен
У меня есть 70K записей в базе данных oracle , Один метод oracleUserRepository.findAll () занял около 40 минут , чтобы загрузить все сущности и сохранить сущности в mysql БД занимает еще больше времени.
Это правильный способ сделать это? Есть ли способ улучшить производительность в этом?