一、SpringBoot介绍
(一)SpringBoot简介
Spring Boot 是由 Pivotal 团队提供的一个用于简化 Spring 应用初始搭建以及开发过程的框架。它基于 Spring 框架,旨在通过减少配置和简化开发流程来加速应用的开发和部署。Spring Boot 提供了嵌入式的 Tomcat、Jetty 或 Undertow 服务器,使得应用可以作为一个独立的 JAR 文件运行,无需外部部署。
(二)SpringBoot 的优点
- 简化配置:
- 自动配置:Spring Boot 会根据类路径中的依赖自动配置 Spring 应用,减少了手动配置的需要。
- Starter 依赖:通过引入 spring-boot-starter-* 依赖,可以快速集成各种功能,如 Web、JPA、Security 等。
- 快速启动:
- 嵌入式服务器:支持嵌入式 Tomcat、Jetty 或 Undertow,使得应用可以作为一个独立的 JAR 文件运行,无需外部部署。
- 减少启动时间:由于简化了配置和依赖管理,应用的启动时间大大缩短。
- 生产就绪:
- 监控和管理:提供了 Actuator 模块,可以方便地监控和管理应用。
- 健康检查:内置健康检查功能,便于监控应用状态。
- 社区支持:
- 活跃社区:Spring Boot 拥有庞大的用户社区和丰富的文档资源,便于开发者解决问题和获取帮助。
- 广泛使用:许多大型企业和开源项目都在使用 Spring Boot,证明了其稳定性和可靠性。
- 微服务支持:
- Spring Cloud:与 Spring Cloud 结合使用,可以轻松构建微服务架构。
- 服务发现、负载均衡:提供了服务发现(Eureka)、配置中心(Config Server)等功能,支持微服务的开发和部署。
(三)SpringBoot 的缺点
- 学习曲线:
- 复杂性:虽然 Spring Boot 简化了许多配置,但对于初学者来说,理解其自动配置机制和依赖管理可能需要一定时间。
- 依赖管理:Spring Boot 的 Starter 依赖可能会引入不必要的库,导致应用体积增大。
- 过度封装:
- 黑盒操作:自动配置机制可能会隐藏一些底层实现细节,使得开发者难以理解某些配置是如何生效的。
- 调试困难:当遇到问题时,由于自动配置的复杂性,调试过程可能会变得复杂。
- 性能开销:
- 嵌入式服务器:虽然嵌入式服务器简化了部署,但在高并发场景下,性能可能不如独立部署的服务器。
- 内存占用:Spring Boot 应用通常会占用较多的内存,尤其是在使用大量依赖的情况下。
- 版本兼容性:
- 依赖冲突:由于 Spring Boot 使用了固定的依赖版本,可能会导致与其他库的版本冲突。
- 升级困难:升级 Spring Boot 版本时,可能会遇到兼容性问题,需要仔细测试和调整配置。
(四)SpringBoot与微服务的区别
SpringBoot和微服务架构是两个不同的概念,但它们可以很好地结合使用。
- Spring Boot:
- 定义:SpringBoot是一个用于简化Spring应用开发的框架。
- 功能:提供自动配置、嵌入式服务器、生产就绪功能等。
- 适用场景:适用于各种规模的应用开发,包括单体应用和微服务。
- 微服务架构:
- 定义:微服务架构是一种设计风格,将应用拆分为一组小型、独立的服务,每个服务运行在自己的进程中,并通过轻量级的通信机制(如 HTTP)进行交互。
- 功能:强调服务的独立部署、独立扩展和独立维护。
- 适用场景:适用于大型、复杂的系统,需要高可用性和可扩展性的场景。
- 结合使用SpringBoot和微服务
- SpringBoot可以作为构建微服务的基础框架,提供简化开发和部署的功能。
- SpringCloud提供了微服务相关的组件,如服务发现(Eureka)、配置中心(Config Server)、负载均衡(Ribbon)等,与SpringBoot结合使用可以构建完整的微服务架构。
二、创建一个SpringBoot项目
三、@ConfigurationProperties
@ConfigurationProperties是SpringBoot提供的一个注解,用于将配置文件中的属性绑定到 Java 对象中。这使得配置管理更加方便和类型安全。
// DogProperties类如果已经添加到容器中,则不需要再添加@EnableConfigurationProperties注解
// @EnableConfigurationProperties(DogProperties.class)
@SpringBootApplication
public class BootdemoApplication {public static void main(String[] args) {SpringApplication.run(BootdemoApplication.class, args);}
}
@ConfigurationProperties(prefix = "dog")
@Component
@Data
public class DogProperties {private String name;private Integer age;private String color;
}
application.properties:
# 应用服务 WEB 访问端口
server.port=8080dog.name=gigi
dog.age=3
dog.color=black
测试类:
@SpringBootTest
class BootdemoApplicationTests {@AutowiredDogProperties dogProperties;@Testvoid contextLoads() {System.out.println(dogProperties);}
}
运行结果:
DogProperties(name=gigi, age=3, color=black)
四、properties与yml配置文件
在properties文件中写中文会乱码,推荐使用yml文件,properties的优先级比yml高,出现相同配置,优先使用properties文件中的配置。
@Data
@Component
@ConfigurationProperties(prefix = "person")
public class Person {private String name;private Integer age;private String birthDay;private Boolean like;private Child child;private List<Dog> dogs;private Map<String,Cat> cats;
}@Data
class Child{private String name;private Integer age;private String birthDay;private List<String> text;
}@Data
class Cat{private String name;private Integer age;
}@Data
class Dog{private String name;private Integer age;
}
application.yml文件:
spring:application:name: bootdemodog:name: hahaage: 10color: whiteperson:name: 张三age: 10birthDay: 2019-01-01like: truechild:name: 李四age: 12birthDay: 2020-01-01text: # 或者写在[]里面 ["aa","bb","cc"]- hello- worlddogs:- name: dog1age: 1- name: dog2age: 3- { name: dog3, age: 4 }cats:- bluecat:name: 蓝猫age: 1- whitecat:name: 白猫age: 2- blackcat: { name: 黑猫, age: 3 }
五、banner的配置
在resource文件夹下,新建banner.txt 或者 banner.jpg
https://www.bootschool.net/ascii
六、启动Spring应用的其他方式
@SpringBootApplication
public class BootdemoApplication {public static void main(String[] args) {// 应用启动SpringApplication.run(BootdemoApplication.class, args);/*** 下面两种启动方式可以在启动前配置一些参数* */// 链式调用/*SpringApplicationBuilder builder = new SpringApplicationBuilder();builder.sources(BootdemoApplication.class).bannerMode(Banner.Mode.OFF).environment(null).run(args);*//* SpringApplication application = new SpringApplication(BootdemoApplication.class);application.setBannerMode(Banner.Mode.OFF);
// application.setListeners();application.setEnvironment(null);application.run(args);*/}
}
七、日志系统
(一)日志格式
规定:项目开发不要写System.out.println();用日志记录信息
@Slf4j
@SpringBootTest
public class LogTest {@Testpublic void test() {System.out.println("====================");log.error("错误日志");log.warn("警告日志");log.trace("追踪日志");log.debug("调试日志");log.info("信息日志");}
}2024-12-27 20:57:20.930 ERROR 15588 --- [ main] com.javatest.springboot01Demo.LogTest : 错误日志
2024-12-27 20:57:20.931 WARN 15588 --- [ main] com.javatest.springboot01Demo.LogTest : 警告日志
2024-12-27 20:57:20.931 INFO 15588 --- [ main] com.javatest.springboot01Demo.LogTest : 信息日志
(二)日志分组
# 调整日志级别 root表示根级别,默认为info,可以不写
# 如果哪个包、哪个类不说明日志级别,则默认为root的级别
# root后可选参数:trace, debug, info, warn, error, fatal, off
logging.level.root=debug
# 指定包打印日志级别
logging.level.com.javatest.boot=info
# 设置日志组
logging.group.biz=com.javatest.boot.service,com.javatest.boot.dao
# 整组批量设置日志级别
logging.level.biz=debug
(三)日志输出文件输出
# 指定日志输出文件
logging.file.name=springboot-01-demo/boot.log
# 指定日志输出路径
#logging.file.path=D://logs