我使用springboot在Java中创建了一个命令行应用程序,该程序将数据从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);
}
}
我正在使用transactional保存每个用户,因为如果userAddressEntity或userDetailsEntity中的任何一个保存失败,我想回滚
我在oracle数据库中有70K个条目。 oracleUserRepository.findAll()方法仅花费了大约[[40分钟来加载所有实体,并将实体保存到mysql DB会花费更多时间。
这是正确的方法吗?无论如何,有什么可以提高性能的吗?