Java 通过调用RESTAPI填充数据库列

Java 通过调用RESTAPI填充数据库列,java,spring-boot,api,rest,spring-data-jpa,Java,Spring Boot,Api,Rest,Spring Data Jpa,我有一个带有数据库的小型spring引导服务(我使用SpringDataJPA),我需要从另一个RESTAPI获得一些附加信息。因此,我只能通过从数据库中调用带有ID的RESTAPI,然后保存它来获取这些附加信息 因此,我创建了一个带有端点的控制器/migrate,我的想法是,当我启动服务时,我可以调用这个端点,然后我使用findAll()加载所有条目,最后我对它们进行迭代,并为每个条目调用第三方rest端点以获取附加信息。到目前为止,到目前为止。。。但我不确定什么是最好的方法。我的端点是仅仅是

我有一个带有数据库的小型spring引导服务(我使用SpringDataJPA),我需要从另一个RESTAPI获得一些附加信息。因此,我只能通过从数据库中调用带有ID的RESTAPI,然后保存它来获取这些附加信息

因此,我创建了一个带有端点的控制器
/migrate
,我的想法是,当我启动服务时,我可以调用这个端点,然后我使用
findAll()
加载所有条目,最后我对它们进行迭代,并为每个条目调用第三方rest端点以获取附加信息。到目前为止,到目前为止。。。但我不确定什么是最好的方法。我的端点是仅仅是一个
void
方法,还是我应该对它进行建模
ResponseEntity
?我的问题是这里的最佳实践是什么

下面是一些代码

@RestController
@RequiredArgsConstructor
@Slf4j
public class MigrationController {

private final MigrationService migrationService;

@GetMapping("/migrate")
public ResponseEntity<MigrationResult> migrateData() {

    var migrationResult = migrationService.migrateData();
    // this is not optimal here...
    if (migrationResult.getStatusCode().startsWith("2")) {
        return ResponseEntity.ok().body(migrationResult);
    } else {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(migrationResult);
    }
}
这是我的模型,我使用的是ResponseEntity:

public class MigrationResult {
    @NotNull
    private String statusCode;
    @NotNull
    private String message;
}
如您所见,我需要从所谓的
orderService
中获取此
uniqueId
,然后将其保存到我的客户实体。显然,这将需要一些时间来完成(大约1000个条目->调用)。
我觉得我这样做很“可疑”。但是我不确定什么是最好的方法,也就是说,在错误消息和可能的超时(如果作业运行太长)方面,什么是更好的方法来执行类似的操作,并且仍然保持HTTP一致。此外,没有UI-这就是为什么我决定使用这个小POJO
MigrationResult
,其中包含一条消息,我可以变成JSON。

这取决于您的需求。如果您不需要这些信息,只需返回HttpStatus即可。好的,但我认为最好的方法是在迁移任务完成后返回一个报告。我不希望将信息包装在字符串变量上,而是希望将这些信息存储在单独的变量中,并创建一个方法来使用要显示的数据构建消息

public class MigrationReport{
  
   private String status;
   private String startDate;
   private String numberOfusers;
   private Long   durationTime;
   //
   // 
   private String message;
   
   //getter && setter methods 

} 

建议:不要使用long start=System.currentTimeMillis();使用Instant.now()

这取决于您的需求。如果您不需要这些信息,只需返回HttpStatus即可。好的,但我认为最好的方法是在迁移任务完成后返回一个报告。我不希望将信息包装在字符串变量上,而是希望将这些信息存储在单独的变量中,并创建一个方法来使用要显示的数据构建消息

public class MigrationReport{
  
   private String status;
   private String startDate;
   private String numberOfusers;
   private Long   durationTime;
   //
   // 
   private String message;
   
   //getter && setter methods 

} 

建议:不要使用long start=System.currentTimeMillis();使用Instant.now()

好的,这是一个好主意,可以在pojo中为报告打包我想要的所有内容。好的,这是一个好主意,可以在pojo中为报告打包我想要的所有内容。