一、介绍
SpringBoot 是由Pivota团队提供的全新框架,其设计目的就是用来简化Spring应用的初始搭建以及开发过程。
基于Idea进行开发,需要注意确保联网且能够加载程序框架结构
Springboot程序的优缺点
- 起步依赖(简化依赖配置)
- 自动配置(简化常用工程相关配置)
- 辅助功能 (内置服务器,tomcat…)
二、创建SpringBoot项目
方式一 Idea
新增一个controller
然后运行这个文件StudySpringBootApplication
运行结果
通过浏览器访问:
方式二 官网
通过官网的初始化功能创建:https://start.spring.io/
以上demo实现的过程:
- parent
– 开发SpringBoot程序要继承spring-boot-starter-parent;
– spring-boot-startr-parent中定义了若干个依赖管理;
– 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突;
– 继承parent的形式也可以采用引入依赖的形式实现效果;
– 主要目的是减少不同版本依赖的冲突 - startr
–SpringBoot中常见项目名称,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的 - 实际开发
– 使用任意坐标,仅书写GAV中的G和A,V右SpringBoot提供,除非SpringBoot未提供对应版本V
– 如发生坐标错误,再指定Version(要小心版本冲突)
三、配置文件
3.1 properties 格式
在/resources/application.properties 配置文件中配置
# 服务器端口
server.port=80
# 日志配置
# 日志输出等级
logging.level.root=info
3.2 yaml格式
server:
port:80
3.3 yml格式(推荐)
这个是目前最常用的格式
语法规则:
- 大小写敏感;
- 属性层次关系使用多行描述,每行结尾使用冒号结束;
- 使用缩进表示层级关系,同级左侧对其,只允许使用空格(不允许使用Tab键);
- 属性值前面添加空格(属性名与属性值之间使用冒号 + 空格作为分隔);
- # 表示注释
- 字面值表示方式
boolean: TRUE # 大小写都可以
float: 3.14
null: ~ # ~ 表示null
string: HelloWorld # 字符串可以直接写
string2: "Hello World" # 可以使用双引号包裹特殊字符
date: 2018-02-17 # 日期必须使用
datetime: 2018-02-17T15:02:31+08:00 # 表示日期和时间之间使用T连接,最后用+代表时区
# 列表数组
subject:
- java
- 前端
- 大数据
likes: [王者荣耀,刺激战场]
# 对象数组格式
users:
- name: Tom
age: 4
- name: Jerry
age: 5
users2: [{name:tom,age:4}, {name:Jerry, age:5}]
3.3.1 常用的配置参数
server:
port: 80
logging:
level:
root: info
3.3.2 怎么读取配置文件值
使用@Value读取单个数据,属性名引用方式: ${一级属性名.二级属性名…}
server:
port: 80
logging:
level:
root: info
country: china
users:
name: Yio
enterprise:
subject:
- Java
- python
- C++
package com.yio.studyspringboot.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;
/**
* @author Yio
*/
// Rest 模式
@RestController
@RequestMapping("/demo")
public class DemoController {
// 读取配置yml文件中的数组单一数据
@Value("${country}")
private String country;
@Value("${users.name}")
private String name;
@Value("${enterprise.subject[0]}")
private String subject;
@GetMapping
public String getById(){
System.out.println("SpringBoot is running...");
System.out.println("country--->" + country);
System.out.println("name---->" + name);
System.out.println("subject---->" + subject);
return "springboot is running...";
}
}
3.3.3 yml 中变量使用
baseDir: \Yio\JavaHome\tudySpringBoot\Yio
testDir: ${baseDir}\test
在controller中
package com.yio.studyspringboot.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;
/**
* @author Yio
*/
// Rest 模式
@RestController
@RequestMapping("/demo")
public class DemoController {
@Value("${testDir}")
private String testDir;
@GetMapping
public String getById(){
System.out.println("testDir---->" + testDir);
return "springboot is running...";
}
}
3.3.4 读取全部数据
在controller中封装一个Environment对象
注意:但是这个不是最常用的方式
@Autowired
private Environment env;
// 通过以下方法获取
env.getProperty("users.name")
3.3.5 通过定义bean加载部分
示例
MyDataSource.java
package com.yio.studyspringboot;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component // 声明为springboot 管理的bean
@ConfigurationProperties(prefix = "datasource") // bean要管理的数据数组的主节点名称
public class MyDataSource {
private String driver;
private String url;
private String username;
private String password;
/**
* 获取
*
* @return driver
*/
public String getDriver() {
return driver;
}
/**
* 设置
*
* @param driver
*/
public void setDriver(String driver) {
this.driver = driver;
}
/**
* 获取
*
* @return url
*/
public String getUrl() {
return url;
}
/**
* 设置
*
* @param url
*/
public void setUrl(String url) {
this.url = url;
}
/**
* 获取
*
* @return username
*/
public String getUsername() {
return username;
}
/**
* 设置
*
* @param username
*/
public void setUsername(String username) {
this.username = username;
}
/**
* 获取
*
* @return password
*/
public String getPassword() {
return password;
}
/**
* 设置
*
* @param password
*/
public void setPassword(String password) {
this.password = password;
}
public String toString() {
return "MyDataSource{driver = " + driver + ", url = " + url + ", username = " + username + ", password = " + password + "}";
}
}
在controller中使用
// 通过自定义bean,获取部分数据
@Autowired
private MyDataSource myDataSource;
System.out.println("---------------------------------------------");
System.out.println(myDataSource.getUsername());
System.out.println(myDataSource.getPassword());
3.4 共存优先级
在sprintboot 工程中,三个类型的配置文件共存的情况下,优先级如下properties > yml > yaml