我是SpringBoot的新手,所以请随意填写所需的详细信息。
我在一个SpringBoot应用程序中编写了这个Rest Controller,它可以正常工作。我的问题是,如何正确地创建此控制器的实例,以便可以使用它来查询数据库?
我试着做这样的事情,但是一直收到错误。
InventoryController ic = new InventoryController();
System.out.println(ic.getInventory());我正在努力避免不得不在SpringBoot应用程序本身上进行REST调用的情况。
提前谢谢你
发布于 2017-01-27 07:05:16
在控制器上执行数据库调用不被认为是一种好的做法。您可以使用Spring数据存储库,也可以编写利用存储库的服务层代码(执行对数据库的调用)
你可以这样做:
@Service
public class InventoryService {
@Autowire
private IInventoryItemRepo inventoryItemRepo;
@Transactional
public List<Inventory> getInventories() {
//other business rules
return inventoryItemRepo.findAll();
}
//some other logic here
}然后在你的控制器上
@RestController
public class InventoryController {
Logger logger = LoggerFactory.getLogger(InventoryController.class);
@Autowired
private InventoryService inventoryService;
/**
* @return all items in inventory
*/
@HystrixCommand(fallbackMethod="failGood")
@RequestMapping(value = "/inventory", method = RequestMethod.GET)
@ResponseBody Iterable<Inventory> getInventory() {
return inventoryService.findAll();
}
....
}如果您希望避免在Spring上执行调用,可以将服务层代码注入执行调用的组件,假设它是用spring在java上编写的。
如果没有,您还可以构建一个Message Queue并将消息发送到那里。
另一种方法是称为Spring Data REST的方法
发布于 2017-01-27 06:58:33
您不能直接使用controller来查询数据库,或者这样做不是一个好的做法。
一个更好的选择是,您可以利用Spring数据存储库,并在您的控制器中@Autowire它。
我通常要做的是创建一个服务类,其中存储库接口是自动连接的。在控制器中,我自动连接服务类。
我在以下帖子中的回答可能会为你澄清更多的事情:
https://stackoverflow.com/questions/41884383
复制相似问题