- 开发SpringBoot程序要继承spring-boot-starter-parent,所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的;
- spring-boot-starter-parent中定义了若干依赖管理,各版本间存在着诸多坐标版本不同;
- 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突;
- 继承parent的形式也可以采用引入依赖的形式实现效果。
SpringBoot中常见项目名称,定义了当前项目使用的所有坐标依赖,以达到减少依赖配置的目的。
- 开发SpringBoot程序需要导入坐标时通常导入对应的starter;
- 每个不同的starter根据功能不同,通常包含多个依赖坐标;
- 使用starter可以实现快速配置的效果,达到简化配置的目的。
实际开发:
- 使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供,除非SpringBoot未提供对应版本的V;
- 如发生坐标错误,再指定Version(要小心版本冲突)。
package com.clp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class Springboot0101QuickstartApplication {
public static void main(String[] args) {
//生成可配置的容器对象
ConfigurableApplicationContext ctx = SpringApplication.run(Springboot0101QuickstartApplication.class, args);
}
}
SpringBoot的引导类是Boot工程的执行入口,运行main()方法就可以启动项目;
SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean。
1.4、内嵌tomcat内嵌Tomcat服务器是SpringBoot辅助功能之一;内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理;变更内嵌服务器思想是去除现有服务器,添加全新的服务器。
SpringBoot内嵌有三款服务器:
- tomcat(默认):apache出品,粉丝多,应用面广,负载了若干较重的组件。
- jetty:更轻量级,负载性能远不及tomcat。
- undertow:undertow,负载性能勉强跑赢tomcat。
SpringBoot提供了多种属性配置方式:
- application.properties;
在./resource/application.properties中: 用(什么技术就开什么配置) # 服务器的端口配置 server.port=80 # 修改banner(运行日志图标) #spring.main.banner-mode=off # 关闭运行日志图标 #spring.banner.image.location=logo.png # 设置日志相关(设置启动日志) logging.level.root=debug logging.level.com.clp=warn
- application.yml(常用);
application.yml: server: port: 80
- application.yaml;
application.yaml: server: port:80
不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留。加载优先级:application.properties -> application.yml -> application.yaml
2.2、YMALyaml:YAML(YAML,Ain't Markup Language):一种数据序列化格式。优点:① 容易阅读;② 容易与脚本语言交互;③ 以数据为核心,重数据轻格式。
2.2.1、yaml语法规则(核心规则:数据前面要加空格与冒号隔开):
- 大小写敏感;
- 属性层级关系使用多行描述,每行结尾使用冒号结束;
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用tab键);
- 属性值前面添加空格(属性名与属性值之间用冒号+空格作为分隔);
- # 表示注释。
# 设置端口 server: port: 80 user: name: zhangsan age: 18 users1: - name: zhangsan age: 18 - name: lisi age: 17 - name: wangwu age: 20 users2: [{name: zhangsan, age: 17}, {name: lisi, age: 18}] a: d: name: zhangsan hobbies: - game - music - sleep hobbies2: [game, music, sleep]
使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名...}
package com.clp.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/books")
public class BookController {
//读取yml数据中的单一数据
@Value("${country}")
private String country;
@Value("${user0.name}")
private String name;
@Value("${users[0].age}")
private int age;
@GetMapping
public String getById() {
System.out.println("springboot is running..");
System.out.println("country: " + country);
System.out.println("user.name: " + name);
System.out.println("users[0].age: " + age);
return "springboot is running...";
}
}
封装全部数据到Environment对象:
package com.clp.controller;
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired //使用自动装配将application.yml中所有的数据封装到一个对象Environment中
private Environment env;
@GetMapping
public String getById() {
System.out.println("springboot is running..");
System.out.println(env.getProperty("server.port"));
return "springboot is running...";
}
}
封装部分数据:(注意:封装类需要定义为Spring管理的bean,否则无法进行属性注入)
package com.clp;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "datasource") //指定加载的数据
public class MyDataSource {
private String driver;
private String url;
private String username;
private String password;
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "MyDataSource{" +
"driver='" + driver + ''' +
", url='" + url + ''' +
", username='" + username + ''' +
", password='" + password + ''' +
'}';
}
}
package com.clp.controller;
import com.clp.MyDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private MyDataSource myDataSource;
@GetMapping
public String getById() {
System.out.println("springboot is running..");
System.out.println("myDataSource: " +myDataSource);
return "springboot is running...";
}
}
2.2.3、yml文件中的变量引用
application.yml:
baseDir: C:windows
# 使用${属性名}的方式引用数据
tempDir1: ${baseDir}temp # t不解析为制表符
# 使用双引号包裹的字符串,其中的转义字符可以生效
tempDir2: "${baseDir}temp" # t解析为制表符
3、整合第三方技术



