在传统的基于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依赖模块
org.springframework.boot
spring-boot-starter-web
这个是官方提供的 对web支持的依赖模块。Spring Boot会自动关联Web开发相关的依赖,例如Tomcat以及Spring-webmvc等,进而对Web开发进行支持,同时相关技术的配置也将实现自动配置。
打开maven仓库spring-boot-starter-web目录下相关版本的pom文件,可以看到web依赖关系。例如打开spring-boot-starter-web-2.0.7.RELEASE.pom文件
org.springframework.boot
spring-boot-starters
2.0.7.RELEASE
org.springframework.boot
spring-boot-starter-web
2.0.7.RELEASE
Spring Boot Web Starter
org.springframework.boot
spring-boot-starter
2.0.7.RELEASE
compile
org.springframework.boot
spring-boot-starter-json
2.0.7.RELEASE
compile
org.springframework.boot
spring-boot-starter-tomcat
2.0.7.RELEASE
compile
org.hibernate.validator
hibernate-validator
6.0.13.Final
compile
org.springframework
spring-web
5.0.11.RELEASE
compile
org.springframework
spring-webmvc
5.0.11.RELEASE
compile
可以看到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文件依赖如下:
org.springframework.boot
spring-boot-starter
2.0.7.RELEASE
compile
org.springframework
spring-web
5.0.11.RELEASE
compile
com.fasterxml.jackson.core
jackson-databind
2.9.7
compile
com.fasterxml.jackson.datatype
jackson-datatype-jdk8
2.9.7
compile
com.fasterxml.jackson.datatype
jackson-datatype-jsr310
2.9.7
compile
com.fasterxml.jackson.module
jackson-module-parameter-names
2.9.7
compile
Spring默认使用Jackson开源框架作为JSON解析框架。更多参考
5、spring-boot-starter依赖继承自spring-boot-starters,打开spring-boot-starter-2.0.7.RELEASE.pom文件如下:
org.springframework.boot
spring-boot
2.0.7.RELEASE
compile
org.springframework.boot
spring-boot-autoconfigure
2.0.7.RELEASE
compile
org.springframework.boot
spring-boot-starter-logging
2.0.7.RELEASE
compile
javax.annotation
javax.annotation-api
1.3.2
compile
org.springframework
spring-core
5.0.11.RELEASE
compile
org.yaml
snakeyaml
1.19
runtime
而spring-boot-starter-logging(默认的日志启动器)依赖的spring-boot-starter-logging-2.0.7.RELEASE.pom文件依赖关系如下:
ch.qos.logback
logback-classic
1.2.3
compile
org.apache.logging.log4j
log4j-to-slf4j
2.10.0
compile
org.slf4j
jul-to-slf4j
1.7.25
compile
默认使用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.properties里面指定使用哪个环境的配置文件.
通过spring.profiles.active属性来设置,其值对应{profile}值。
spring.profiles.active=test 则是使用测试环境配置文件
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配置文件中的