SpringBoot2.x学习-工程介绍

一、目录结构

在传统的基于maven的java web项目中,工程目录结构是这样的:

my-app
|-- pom.xml
`-- src
    |-- main
    |   |-- java  存放Java源文件
    |   |-- resources  存放框架工程配置文件
    |   |-- webapp  存放静态文件页面等
    |        -- WEB-INF
    |              --web.xml
    |-- test  存放测试程序
        |-- java
        |-- resources

而基于Maven构建的SpringBoot工程的目录结构如下:

springboot-app
|-- pom.xml
`-- src
    |-- main
    |   |-- java  存放Java源文件
    |   |   --groupId
    |   |      --artifactId
    |   |         --XXXApplication.java  启动类
    |   |-- resources  
    |        |-- static  存放各类静态文件 css、js、image等
    |        |-- templates  存放页面模板文件 html、jsp等
    |        |-- application.properties  全局配置文件
    |-- test  存放测试程序
        |-- java
二、启动器依赖

1、Spring Boot Starters(启动器)
Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。Starters包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。更多参考
2、spring-boot-starter-web依赖模块

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

这个是官方提供的 对web支持的依赖模块。Spring Boot会自动关联Web开发相关的依赖,例如Tomcat以及Spring-webmvc等,进而对Web开发进行支持,同时相关技术的配置也将实现自动配置。
打开maven仓库spring-boot-starter-web目录下相关版本的pom文件,可以看到web依赖关系。例如打开spring-boot-starter-web-2.0.7.RELEASE.pom文件

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starters</artifactId>
    <version>2.0.7.RELEASE</version>
</parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <version>2.0.7.RELEASE</version>
  <name>Spring Boot Web Starter</name>
<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.0.7.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-json</artifactId>
      <version>2.0.7.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <version>2.0.7.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.hibernate.validator</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>6.0.13.Final</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.0.11.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.0.11.RELEASE</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>

可以看到spring-boot-starter-web关联依赖了对json、tomcat、validator、mvc支持。Spring boot 默认使用Tomcat作为嵌入式Servlet容器,只需要引入spring-boot-start-web依赖,默认采用的Tomcat作为容器。
3、spring-boot-starters这个是Spring Boot的核心启动器,包括自动配置、日志、和YAML文件的支持。
4、spring-boot-starter-json依赖模块:打开spring-boot-starter-json-2.0.7.RELEASE.pom文件依赖如下:

<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.0.7.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.0.11.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.7</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-jdk8</artifactId>
      <version>2.9.7</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-jsr310</artifactId>
      <version>2.9.7</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.module</groupId>
      <artifactId>jackson-module-parameter-names</artifactId>
      <version>2.9.7</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>

Spring默认使用Jackson开源框架作为JSON解析框架。更多参考
5、spring-boot-starter依赖继承自spring-boot-starters,打开spring-boot-starter-2.0.7.RELEASE.pom文件如下:

<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot</artifactId>
      <version>2.0.7.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-autoconfigure</artifactId>
      <version>2.0.7.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
      <version>2.0.7.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>javax.annotation</groupId>
      <artifactId>javax.annotation-api</artifactId>
      <version>1.3.2</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.0.11.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.yaml</groupId>
      <artifactId>snakeyaml</artifactId>
      <version>1.19</version>
      <scope>runtime</scope>
    </dependency>
  </dependencies>

spring-boot-starter-logging(默认的日志启动器)依赖的spring-boot-starter-logging-2.0.7.RELEASE.pom文件依赖关系如下:

<dependencies>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-to-slf4j</artifactId>
      <version>2.10.0</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jul-to-slf4j</artifactId>
      <version>1.7.25</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>

默认使用Logback。

三、全局配置文件

1.可以在Spring Boot项目的 src/main/resources目录下或者类路径的/config目录下创建一个全局文件application.properties或者是.yml的application.yml文件,用于修改Spring Boot项目的默认配置值。例如修改项目的端口和Spring MVC处理的url。application.properties内容如下:

server.port=8888
server.servlet.context-path=/

server.tomcat.uri-encoding=utf-8

2.多环境配置
通过配置多份不同配置文件来区分开发、测试、生产环境。
在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,
例如:

  • application-dev.properties 开发环境配置文件
  • application-test.properties 测试环境配置文件
  • application-prod.properties 生产环境配置文件

然后在application.properties里面指定使用哪个环境的配置文件.
通过spring.profiles.active属性来设置,其值对应{profile}值。
spring.profiles.active=test 则是使用测试环境配置文件

四、XXXApplication启动类与核心注解

Spring Boot项目一般都会有注解*Application标注的入口类,入口类会有一个main方法,main方法是一个标准的Java应用程序的入口方法,可以直接启动。
如下所示:

package com.soft.fire;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class FireApplication {

    public static void main(String[] args) {

        SpringApplication.run(FireApplication.class, args);
    }

}

@SpringBootApplication注解是Spring Boot的核心注解,用此注解标注的入口类是应用的启动类。@SpringBootApplication是一个组合注解,源码如下:


@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
    @AliasFor(
        annotation = EnableAutoConfiguration.class
    )
    Class<?>[] exclude() default {};

    @AliasFor(
        annotation = EnableAutoConfiguration.class
    )
    String[] excludeName() default {};

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackages"
    )
    String[] scanBasePackages() default {};

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackageClasses"
    )
    Class<?>[] scanBasePackageClasses() default {};
}

1、@SpringBootConfiguration:这是Spring Boot项目的配置注解。由@Configuration和其他注解一起组合成。
2、@EnableAutoConfiguration:启动自动配置,这个注解会让Spring Boot根据当前项目所依赖的jar包自动配置项目的相关配置项。
3、@ComponentScan:扫描配置,Spring Boot默认会扫描@SpringBootConfiguration所在类的同级包以及它的子包,所以建议将@SpringBootConfiguration标注的启动类放置在项目包下(Group Id/Artifact Id),这样就可以保证Spring Boot项目可以自动扫描到所有的包。这个组件扫描注解相当于Spring XML配置文件中的<context:component-scan >元素。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值