查看初始化的 Spring Boot 新项目
前面一篇已经大致讲解了如何生成spring boot项目,是里面的配置在这章做个大致的总结。
spring boot 项目文件说明:
1. build.gradle:Gradle构建说明文件。//用maven构建的话就是pom.xml文件
2.DemoApplication.java :应用程序的启动引导类(bootstrap class),也是主要的Spring配置类。
3.application.properties :用于配置应用程序和Spring Boot的属性。
4.DemoApplicationTests.java :一个基本的集成测试类。
一 .DemoApplication: 在Spring Boot应用程序里有两个作用:配置和启动引导。首先,这是主要的Spring配置类。虽然Spring Boot的自动配置免除了很多Spring配置,但你还需要进行少量配置来启用自动配置
@SpringBootApplication 开启了Spring的组件扫描和Spring Boot的自动配置功能。实际
上, @SpringBootApplication 将三个有用的注解组合在了一起。
Spring的 @Configuration :标明该类使用Spring基于Java的配置。
Spring的 @ComponentScan :启用组件扫描,这样你写的Web控制器类和其他组件才能被
自动发现并注册为Spring应用程序上下文里的Bean。这里使用 @RestController 进行注解,这样组件扫描并找到它。
Spring Boot 的 @EnableAutoConfiguration : 这 个 不 起 眼 的 小 注 解 也 可 以 称 为@Abracadabra就是这一行配置开启了Spring Boot自动配置的魔力,让你不用再写成篇的配置了
注:在Spring Boot 1.2.0以后就整合三个注解合并为一个了
二 DemoApplicationTests.java
@RunWith(SpringRunner.class)
@SpringBootTest(classes={DemoApplication.class})// 指定启动类
//@SpringApplicationConfiguration(classes = DemoApplication.class)// 1.4.0 前版本
public class DemoApplicationTests {
@Test
public void contextLoads() {
System.out.println("test");
}
@Before
public void beforeTest() {
System.out.println("before");
}
@After
public void afterTest() {
System.out.println("after");
}
}
输出结果 before,test,after
后续的篇章会详细讲解如何单元测试
三 application.properties
如果我们想更改服务器的端口号,那么最直接省力的方法就是在这个配置文件里添加server.port=8000
加上这一行,嵌入式Tomcat的监听端口就变成了8000,而不是默认的8080。这说明application.properties文件可以很方便地帮你细粒度地调整Spring Boot的自动配置。
application.yml跟其功能一致,主要是yml文件其配置格式更加清楚.
server:
port: 8090
session-timeout: 30
tomcat.max-threads: 0
tomcat.uri-encoding: UTF-8
spring:
datasource:
url : jdbc:mysql://localhost:3306/my
username : root
password : root
driverClassName : com.mysql.jdbc.Driver
jpa:
database : MYSQL
show-sql : true
hibernate:
ddl-auto : update
naming-strategy : org.hibernate.cfg.ImprovedNamingStrategy
properties:
hibernate:
dialect : org.hibernate.dialect.MySQL5Dialect
注意:yml 配置文件的语法
- 在 properties 文件中是以 “.” ” 进行分割 ,在 在 yml 中使用 “ : ”进行分割
- yml 的数据格式和 json 的格式很像,都是 K-V 结构的。并且是通过 “ : ” 赋值
- 在 yml 中缩进一定不能使用 TAB 件,否则会报错。
- 每个 K 后面一定要加空格
四 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<!-- 从 spring-boot-starter-parent继承版本号 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>myproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<!-- 起步依赖 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 热部署,只要代码改变保存后服务自动重启 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
</dependencies>
<!-- spring boot的maven插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Spring Boot通过提供众多起步依赖降低项目依赖的复杂度。起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。很多起步依赖的命名都暗示了它们提供的某种或某类功能。比如我们想以Thymeleaf为Web视图,用JPA来实现数据持久化,因此在构建文件里还需要Thymeleaf和Spring Data JPA的起步依赖。
(1)排除传递依赖
如果我们不需要使用jackson的传递依赖,(虽然放着也没啥影响),我们可以这么使用:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
</exclusion>
</exclusions>
</dependency>
(2) 覆盖传递依赖
另一方面,也许项目需要Jackson,但你需要用另一个版本的Jackson来进行构建,而不是Web起步依赖里的那个。假设Web起步依赖引用了Jackson 2.3.4,但你需要使用2.4.3 。在Maven里,你可以直接在pom.xml中表达诉求,就像这样
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.3</version>
</dependency>
Maven总是会用最近的依赖,也就是说,你在项目的构建说明文件里增加的这个依赖,会覆盖传递依赖引入的另一个依赖。