Spring 的诞生是为了简化 Java程序的开发的,而Spring Boot
的诞生是为了简化Spring
程序开发的。
Spring Boot翻译一下就是Spring脚手架。Spring Boot
就是 Spring
框架的脚手架,它就是为了快速开发 Spring
框架而诞生的。
使用Idea进行创建:
网页版创建项目:spring initializr
配置文件的分类:
整个项目中所有重要的数据都是在配置文件中配置的,比如∶
想象一下如果没有配置信息,那么 Spring Boot项目就不能连接和操作数据库,甚至是不能保存可以用于排查问题的关键日志,所以配置文件的作用是非常重要的。
Spring Boot
配置文件主要分为以下两种格式:
.properties
.yml
properties
可以和yml
一起存在于一个项目当中,当properties
和yml
一起存在一个项目中时,如果配置文件中出现了同样的配置,比如properties
和yml
中都配置了“server.port
”,那么这个时候会以properties
中的配置为主,也就是**.properties
配置文件的优先级最高,但加载完.properties文件
之后,也会加载.yml
文件的配置信息**。.properties
可以和.yml
共存,但实际的业务当中,我们通常会采取一种统一的配置文件格式,这样可以更好的维护(降低故障率)。properties
配置文件是最早期的配置文件格式,也是创建Spring Boot
项目默认的配置文件。
properties
是以键值的形式配置的,key
和 value
之间是以“=
”连接的,如:
#系统的配置文件
server.port=8080
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.name=root
spring.datasource.password=123456
如果在项目中,想要主动的读取配置文件中的内容,可以使用@Value
注解来实现。@Value
注解使用“${}
”的格式读取,如下代码所示:
新建一个UserController
类:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class UserController {
@Value("${server.port}")
private String port;
@ResponseBody//返回一个非静态页面的数据
@RequestMapping("/sayhi")//设置路由地址(一定要全部小写)
public String sayHi(){
System.out.println("Hello" + port);
return "Hello,World + port:" + port;
}
}
在浏览器中输入url
:
页面进行加载之后,可以在控制台看到:
properties
配置是以 key-value
的形式配置的,从上面的基本语法中可以看到properties
配置⽂件中会有很多的冗余的信息。想要解决这个问题,就可以使用 yml
配置文件的格式。
yml
是 YMAL
是缩写,它的全称 Yet Another Markup Language
翻译成中文就是“另⼀种标记语言”。
yml特点:
java/golang/高版本python
都可以用yml作为配置文件。key : value
,注意 key 和 value 之间使⽤英文冒号加空格的方式组成的,其中的空格不可省略。
基本语法如下:
#连接数据库
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8mb4&useSSL=true
name: root
password: 123456
yml
读取配置的⽅式和 properties
相同,使⽤ @Value
注解即可。
例:yml配置文件里面写
string:
hello: shijain
在类中进行读取:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class UserController {
@Value("${string.hello}")
private String hello;
@ResponseBody//返回一个非静态页面的数据
@RequestMapping("/sayhi")//设置路由地址(一定要全部小写)
public String sayHi(){
System.out.println("YML " + hello);
return "yml " + hello;
}
}
页面加载结果为:
在控制台中显示:
练习一:value 值加单双引号
在yml配置文件中配置如下信息:
mystring: nihao\n世界
mystring2: 'nihao\n世界'
mystring3: "nihao\n世界"
读取程序实现代码如下:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
```java
@Controller
public class UserController {
@Value("${mystring}")
private String mystring;
@Value("${mystring2}")
private String mystring2;
@Value("${mystring3}")
private String mystring3;
@ResponseBody//返回一个非静态页面的数据
@RequestMapping("/sayhi")//设置路由地址(一定要全部小写)
public String sayHi(){
System.out.println("mystring:"+ mystring);
System.out.println("mystring2:"+ mystring2);
System.out.println("mystring3:"+ mystring3);
}
}
运行程序所得结果:
从上述结果可以看出:
yml
中如果使用了双引号就会按照(原)语义执行,如果不加单、双引号,或者加了单引号,那么默认会将字符串中的特殊字符进行转义,比如 \n -> \n(转义)处理。还可以在yml中配置对象:
#对象写法1
student1:
id: 1
name: 张三
age : 18
#对象写法2(⾏内写法)
student2: {id: 2,name: 李四,age: 20}
这个时候就不能用 @Value
来读取配置中的对象了,此时要使⽤另⼀个注解 @ConfigurationProperties
来读取,具体实现如下:
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Controller;
@Data //使用Data就不用再写 getter 和 setter ⽅法及toString方法
@ConfigurationProperties(prefix = "student1")//读取配置文件中的对象
@Controller//不能省略
public class Student {
private int id;
private String name;
private int age;
}
调用类的实现如下:
@Controller
public class UserController {
@Autowired
private Student student;
@ResponseBody//返回一个非静态页面的数据
@RequestMapping("/sayhi")//设置路由地址(一定要全部小写)
public String sayHi(){
System.out.println(student);
return "student:"+student;
}
}
代码执行结果:
配置⽂件也可以配置 list 集合,如下所示:
#集合
dbtypes: {name: [mysql,sqlserver,db2]}
集合的读取和对象⼀样,也是使⽤ @ConfigurationProperties
来读取的:
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@Data
@ConfigurationProperties("dbtypes")
public class ListConfig {
private List<String> name;
}
打印类的实现如下:
@Controller
public class UserController {
@Autowired
private ListConfig listConfig;
@ResponseBody//返回一个非静态页面的数据
@RequestMapping("/sayhi")//设置路由地址(一定要全部小写)
public String sayHi(){
return "list: "+ listConfig;
}
}
结果显示: