Master-slave
发布于 2019-10-04 / 13 阅读
0
0

Spring Boot 目录格式规范

前言

在日常工作中使用Spring Boot是已经搭建好了的框架。但在自己从头开始的过程中难免会碰到一些问题,解决这些问题可以让我们更好地了解Spring Boot。

问题描述

main
    com.hill
    +- app
        |   +- Application.java
    +- entity
        |   +- PersonEntity.java
        +- repository
            +- PersonRepository.java
test
    com.hill
        +- repository
            +- PersonRepositoryTest.java
         

在使用 @DataJpaTest 结合Spring Boot编写测用例时在PersonRepositoryTest.java中提示依赖未注入,但在Repository类上已经通过注解标明这是一个bean对象。

搜索相关异常的过程中慢慢发现这是由于自己的项目结构和Spring Boot约定规范不一致导致的。如果在这上述的目录结构下想要运行单元测试,需要额外添加

@EnableJpaRepositories(basePackages = "com.hill")
@EntityScan(basePackages = "com.hill")

两个注解在启动类上,这样Spring Boot才能正确地扫描到需要的@Entity和@Repository注解。

然而仅仅通过微调一下目录的结构,就可以很轻松地解决这个问题

最佳实践

com
 +- example
     +- myapplication
         +- Application.java
         |
         +- customer
         |   +- Customer.java
         |   +- CustomerController.java
         |   +- CustomerService.java
         |   +- CustomerRepository.java
         |
         +- order
             +- Order.java
             +- OrderController.java
             +- OrderService.java
             +- OrderRepository.java

上面的目录结构是Spring Boot官方文档中的例子,其中Spring Boot启动类位于customer,order包的上方,并标注了 @SpringBootApplication 注解。

Spring官方建议将启动类放置在根路径下,因为当启动类被标注了@SpringBootApplication后,Spring Boot会自动扫描该类所在的包及其子包,寻找定义的各类Bean。相当于隐式指定了basePackages属性。

所以在上面的测试用例中,只需要将启动类放置在com.hill包下即如下的目录结构,便可以正常地执行测试用例。

main
    com.hill
        +- Application.java
        +- entity
        |   +- PersonEntity.java
        +- repository
            +- PersonRepository.java

对比看来无疑这种方法更为优雅。


评论