1.使用Spring Initializer快速创建Spring Boot项目
IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目;
选择我们需要的模块;
向导会联网创建Spring Boot项目;
默认生成的Spring Boot项目;
-
主程序已经生成好了,我们只需要我们自己的逻辑创建
-
resources文件夹中目录结构
-
static:保存所有的静态资源; js css images;
-
templates:保存动态模板页面,默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf);
-
application.properties:Spring Boot应用的配置文件;可以修改一些默认设置;
-
选中spring web,就可以帮我们自动写那些web依赖
注意:我这运行显示
这是因为版本的问题,我把依赖换了下面的
java
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.qcby</groupId>
<artifactId>springboot02</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot02</name>
<description>springboot02</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--进行单元测试的模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
启动成功
编写自己的业务
java
package com.qcby.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class hello {
@RequestMapping("/hello")
public String hello(){
return "springboot02";
}
}
注意:出现问题,访问不到controller,是因为,springboot默认扫描所在包下的子包或者其他,这没在一层
2.配制文件
SpringBoot使用一个全局的配置文件,配置文件名是固定的;
•application.properties
•application.yml
配置文件的作用:修改SpringBoot自动配置的默认值;
SpringBoot在底层都给我们自动配置好;
YAML(YAML Ain't Markup Language)
YAML A Markup Language:是一个标记语言
YAML isn't Markup Language:不是一个标记语言;
标记语言: 以前的配置文件;大多都使用的是 xxxx.xml文件;
YAML:以数据为中心,比json、xml等更适合做配置文件;
3.YAML语法
1.基本语法
k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;
只要是左对齐的一列数据,都是同一个层级的
属性和值也是大小写敏感;
2.值的写法
字面量:普通的值(数字,字符串,布尔)
k: v:字面直接来写;(注意空格)
字符串默认不用加上单引号或者双引号;
"":双引号;不会转义字符串里面的特殊字符;
特殊字符会作为本身想表示的意思
name: "zhangsan \n lisi":
输出;zhangsan 换行 lisi
'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: 'zhangsan \n lisi':
输出;zhangsan \n lisi
对象、Map(属性和值)(键值对):k: v:在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v的方式
数组(List、Set) : 用- 值表示数组中的一个元素
行内写法
3.获取属性值
java
package com.qcby.demo;
public class Dog {
private String name;
private Integer age;
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
java
package com.qcby.demo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 将配制文件中配制的每一个属性的值,映射到这个组件中
* @ConfigurationProperties:告诉springboot将本类中所有属性和配制文件相关的配制进行绑定
*prefix = "person" 配制文件中那个下面的所有属性进行一一映射
* 只有这个组件是容器中的组件,才能用容器提供的ConfigurationProperties功能
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastname;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
@Override
public String toString() {
return "Person{" +
"lastname='" + lastname + '\'' +
", age=" + age +
", boss=" + boss +
", birth=" + birth +
", maps=" + maps +
", lists=" + lists +
", dog=" + dog +
'}';
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Boolean getBoss() {
return boss;
}
public void setBoss(Boolean boss) {
this.boss = boss;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public List<Object> getLists() {
return lists;
}
public void setLists(List<Object> lists) {
this.lists = lists;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
}
yml文件:
java
person:
lastname: hello
age: 15
boss: false
birth: 2017/12/12
maps: {k1: v2,k2: 12}
lists:
- lish
- zhaoca
dog:
name: 小黄
age: 12
test测试:
java
package com.qcby.springboot02;
import com.qcby.demo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class Springboot02ApplicationTests {
@Autowired
Person person;
@Test
public void contextLoads() {
System.out.println(person);
}
}
为了方便使用,可以在pom文件中导入配置文件处理器,以后编写配置就有提示
java
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
最后结果:
后面我们在详细解释这一块的注解