Java 通过调用RESTAPI填充数据库列
我有一个带有数据库的小型spring引导服务(我使用SpringDataJPA),我需要从另一个RESTAPI获得一些附加信息。因此,我只能通过从数据库中调用带有ID的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端点以获取附加信息。到目前为止,到目前为止。。。但我不确定什么是最好的方法。我的端点是仅仅是
/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中为报告打包我想要的所有内容。