Spring用于简化Java程序的开发,而SpringBoot为了简化Spring程序开发。SpringBoot是Spring脚手架。可以快速完成Java程序的创建、提高开发效率等。
SpringBoot的优点:
创建SpringBoot项目(支持在网页上创建):IDEA社区版(2021.2.3+)在创建SpringBoot之前要安装Spring Boot Helper 插件,否则没有Spring lnitializr选项。
SpringBoot项目结构:
注意:SpringBoot项目约定大于配置,不需要配置bean扫描路径,但是需要遵守其规则,例如在demo同级目录下配置Bean类,但是SpringBoot项目不会去扫码该路径,只有和DemoApplication同级目录才会去扫描。
配置主要是将程序运行时需要的一些数据信息,放入在配置文件中。
配置文件的种类:properties和yml。
properties和yml的区别:它们可以共存,当两个不同类型的配置文件同时存在时且配置了相同的配置项时,properties的优先级更高,以propertees为准。
注意:一般不会在一个项目中使用不同的配置文件格式。
配置文件内容分类:Spring Boot内置的配置项目和用户自定义配置项。
#配置启动绑定的端口号
server.port=8081
#配置数据库连接链接
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/database?characterEncoding=utf8
#配置连接数据库的用户
spring.datasource.username=root
#配置连接数据的密码
spring.datasource.password=123456
#自定义配置项
key1=hello
优点:
缺点:
语法格式(一级目录):key: value
多级目录:相对于上一级偏移两个空格。
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/database?characterEncoding=utf8
username: root
password: 123456
key1: hello
优点:
当设置value值时,如果值使用双引号进行包裹,如果里面的内容包含转义字符,转义字符能够正常发挥作用。
yml配置其他类型的数据:
配置对象(属性通过setter方法进行赋值,没有setter方法会报错)
yml写法1:
student:
id: 10
age: 20
name: tom
yml写法2:
student: {id: 10, age: 20, name: tom}
//从配置文件中读取对象并赋值到一个bean上
@Data
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
private int age;
private Integer id;
private String name;
}
配置list集合:
写法1:
lists:
list1:
- A
- B
- C
- D
写法2:
lists: {list1: [A,B,C,D]}
@Data
@Component
@ConfigurationProperties(prefix = "lists")
public class MyList1 {
private List list1;
}
关于配置文件中文乱码问题:通过设置当前项目和新项目的编码格式。settings->encoding。旧版本IDEA修改了编码格式,以前的乱码不会被恢复,新版本可以。
读取配置文件的信息使用@Value(“${key}”)注解,自定义和内置的配置项都能够读取到。
@RestController
public class TestController {
@Value("${key1}")
private String key;
@RequestMapping("/hi")
public String sayHi(){
return "HI"+key;
}
}
spring boot更多的系统配置项:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html
多运行环境配置:
dev和test/produce标识可以进行改变,但是其他地方不能改变。
通过application.yml中配置使用哪一个配置文件:
spring: profiles: active: test
日志在程序中不可或缺,非常重要,主要目的是方便程序员定位问题和解决问题。
日志级别:在不同的运行环境,记录不同程度的问题和信息。比如在开发阶段,需要输出的日志比较多,方便我们进行调试程序和查看问题;在生产环境需要输出的日志较少,排除不必要的日志信息,节约系统资源,提高应用程序的性能;
//获取日志对象(使用spring boot内置的日志框架Slf4j) private static Logger log = LoggerFactory.getLogger(TestController.class); //使用日志对象提供的方法进行日志打印,默认级别是info log.trace("trace...");//微量级别最低 log.debug("dubug...");//调试级别 log.info("info...");//普通打印信息,默认级别 log.warn("warn...");//警告级别 log.error("error...");//错误级别
不同的日志框架,实际的实现都不尽相同,日志门面(logging facade)是一种用于封装和统一处理不同底层日志库的接口和工具。
将日志写入到文件。写入日志是以追加的方式,日志文件过大会自动分割。
输出方式1:
#配置日志的名称/设置日志的保存路径
logging:
file:
name: demo.log
输出方式2:
logging:
file:
path: D:\gitee\java\springboot-demo
日志级别设置:控制输出日志的内容
#设置根日志/自定义的日志级别
logging:
level:
root: info
com:
example:
demo: trace
可以使用lombok框架,给类添加@Slf4j,简化开发。
在编译时期,动态将注解转化为对应的代码。
lombok常用注解:
注解 | 作用 |
---|---|
@Getter | 自动添加getter方法 |
@Setter | 自动添加setter方法 |
@ToString | 自动添加toString方法 |
@EqualsAndHashCode | 自动生成equals和hashCode方法 |
@NoArgsConstructor | 自动添加无参构造 |
@AllArgsConstructor | 自动添加所有属性的构造方法 |
@NonNull | 属性不能为NULL |
@RequierdArgsConstructor | 自动添加必要的属性和构造方法final修饰+@NonNull的属性是必需的。 |
@Data | @Getter + @Setter + @ToString +@EqualsAndHashCode+@RequiredArgsConstructor+@NoArgsConstructor |
@Slf4j | 添加⼀个名为 log 的⽇志对象。 |