【发布时间】:2016-10-26 22:21:53
【问题描述】:
我刚开始使用 Spring Boot,并且喜欢用它编写应用程序的简单性。我想知道它是否以及如何使用它来编写(非基于 Web 的)服务。
我有一个仓库接口:
public interface OrderRepository extends MongoRepository<Order, String>
{
}
如果我在 Spring 启动应用程序中使用 @Autowired,我可以使用它对我的数据库执行 CRUD 操作。
但是我现在想在一个简单的应用程序/测试中使用它,而不需要所有的网络服务器后端。
但是,如果我定义了以下测试,则存储库接口没有任何东西可以自动连接到:
public class TestMongoInterface
{
@Autowired
private OrderRepository orderRepository;
@Test
public void canReadOrders()
{
List<Order> orders = orderRepository.findAll();
for(Order o : orders)
System.out.println("found: "+o.toString());
}
}
我找到了一些接近的解决方法,但如果可能的话,我想在这些解决方法阻止的不同服务之间共享我的存储库接口。
所以我的问题是:有没有办法将 MongoRepository 接口自动连接到我的应用程序,在该应用程序中生成所有 db 查询代码,但不是所有其他我不需要的东西,比如 webserver/servlet 代码?
【问题讨论】:
-
那为什么不行呢? Spring Boot != web...只是不要包含 web 依赖项...无论如何它都会起作用。测试 Spring Boot 应用程序在它的参考指南中有非常清楚的记录。
-
你试过the documentation吗?
-
问题是文档太多,不知道从哪里开始,但显然我错误地认为 Spring boot == web.因此,我应该找到不添加这些组件的方法,而不是剥离。我错过了 spring-boot-starter-web 依赖项中的 -web 我可能只需要找到适当的依赖项
-
如果您深入挖掘,我还可以鼓励您编写一个具有自动配置功能的自己的启动器,而不是一个通用模块。对我们来说,共享通用功能就像一种魅力。
-
参见Accessing Data with JPA 指南,了解使用数据库和 JPA 的简单非 Web Spring Boot 应用程序。
标签: java spring spring-boot spring-data autowired