Spring Boot 项目结构

简介

Spring Boot 根据实际的项目可以有不同的文件结构,比如使用maven还是使用gradle构建工具,开发Web项目还是控制台项目,使用JPA文件结构和使用Mybatis的文件结构,前后端分离项目它们采用的目录结构是不同的,但它们包含一个通用文件结构,这些文件是在Spring Boot中约定配置的。

学习环境

  • Spring Boot 2.2.7.RELEASE
  • Maven 3.6.0

Demo的项目结构

Demo创建了一个HelloWorld的项目,项目使用创建RESTful风格的接口,并在单元测试中测试该接口。
在IDEA中项目的结构
Spring Boot 项目结构_第1张图片
在IDEA中可以通过 File -> Project Structure -> Modules (Windows快捷键 Ctrl + Alt + Shift + s)来配置Sources。
Spring Boot 项目结构_第2张图片

pom.xml

POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。参考
在Spring Boot 项目中pom文件为以spring-boot-starter-parent为父项目对一些常用包的版本进行管理,同时也提供了方便将项目打包成jar包的插件spring-boot-maven-plugin。



    
    4.0.0
    
    
        org.springframework.boot
        spring-boot-starter-parent
        2.2.7.RELEASE
        
         
    

    
    jar

    
    cn.makerknz
    hello-world
    0.0.1-SNAPSHOT
    hello-world
    Demo project for Spring Boot

    
    
        
        1.8
    

    
    
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
    

    
        
            
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



Sources

开发的源码是放在Source Folder(src\main\java)中包路径(groupId + artifactId)下,必须要包含HelloWorldApplication启动类作为程序的入口,启动类通过@SpringBootApplication可以自动扫描项目中加载的包并根据配置将Bean及其所依赖的对象注入Spring容器中。调用run方法过程中执行了计时程序的启动时间,Spring 运行时事件监听,始化输入参数、配置环境,输出banner,创建上下文,预处理上下文,刷新上下文,再刷新上下文、发布应用已经启动事件、发布应用启动完成事件一系列操作,在刷新上下文中启动web容器(Tomcat,Jetty或undertow)和将Bean加载到容器。

@SpringBootApplication
@RestController
public class HelloWorldApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloWorldApplication.class, args);
    }

    /**
     * 通过浏览器访问http://localhost:8080/hello-world可以在页面中渲染出大标题的Hello world!
     * @return
     */
    @GetMapping("/hello-world")
    public String helloWorld() {
        return "

Hello world!

"; } }

Test Sources

开发的测试源码是放在Test Source Folder(src\test\java)中包路径(groupId + artifactId)下,@SpringBootTest后,Spring将加载所有被管理的bean,基本等同于启动了整个服务。

@SpringBootTest
class HelloWorldApplicationTests {

    @Autowired
    private WebApplicationContext wac;

    @Test
    void contextLoads() throws Exception {
        MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();

        // MockMvcRequestBuilders构建GET请求
        String result = mockMvc.perform(MockMvcRequestBuilders.get("/hello-world")
                .accept(MediaType.TEXT_HTML_VALUE))
                //返回请求的字符串信息
                .andReturn().getResponse().getContentAsString();

        System.out.println(result);
    }

}

resources

配置

Spring Boot使用一个全局的配置文件名是application,在全局配置之前还有bootstrap命名的文件用于应用程序上下文的引导阶段,配置文件有两种格式properties和yaml,但内容的本质都是Key-Value的格式,如果使用多个profile可以使用可以使用application-${profileName}。
配置文件加载位置和加载顺序可以自己查找。

static

static中放置的是静态页面,Spring Boot 项目启动后可以通过服务器http://localhost:8080/ + 静态页面(包含路径)访问。

templates

templates中放置的是渲染的模板,动态页面需要先请求服务器,访问后台应用程序,然后再转向到页面,比如访问JSP。spring boot建议不要使用JSP,默认使用Thymeleaf来做动态页面。

target 文件夹

打包完成后jar包会生成到target目录下,命名一般是 项目名+版本号.jar。

其它文件

.idea

.idea存放项目的配置信息,包括历史记录,版本控制信息等。

hello-world.iml

iml是 intellij idea的工程配置文件,里面是当前project的一些配置信息。

HELP.md

Markdown的文本格式,可以写一些快速启动和配置的文档,和README.md类似。

总结

在一个Spring Boot通用文件结构中,每一个文件夹或文件都有其指定的功能。

参考

Spring Boot内置tomcat启动原理
Spring Boot项目结构及功能
Spring Boot 中配置文件的优先级和加载顺序

你可能感兴趣的:(Spring,Boot,java,spring,spring,boot,maven)