• Spring Boot


    目录

    🐼今日良言:清醒 知趣 明得失 知进退

    🐭一、SpringBoot介绍

    🐭二、SpringBoot创建和使用

    🐭三、SpringBoot配置文件

    🐭四、SpringBoot日志文件


    🐼今日良言:清醒 知趣 明得失 知进退

    🐭一、SpringBoot介绍

    1.SpringBoot 是什么?

    Spring 的诞生是为了简化 Java 程序的开发,而 Spring Boot 的诞生是为了简化 Spring 程序开发的。

    简而言之,SpringBoot 就是为了快速开发Spring的。

    2.SpringBoot 的优点

    1).快速集成框架,SpringBoot 提供了启动添加依赖的功能,用于秒级集成各种框架。

    2).内置运行容器,无需配置 Tomcat 等Web容器,直接运行和部署程序。

    3).快速部署项目,无需外部容器即可启动并运行项目。

    4).可以完全抛弃繁琐的 XML,使用注解和配置的方式进行开发。


    🐭二、SpringBoot创建和使用

    首先需要安装 SpringBoot Helper 插件才能创建 SpringBoot项目:

    安装好之后,它的名字就变成了 Spring Initializr and Assistant,如下图所示:

     接下来创建SpringBoot 项目:

     

     

      此时当加载完成以后,SpringBoot项目就创建好了。

    创建好的目录如下:

     SpringBoot 项目有两个主要的目录:

    src/main/java 是 Java 源代码

    src/main/resources 是静态资源或配置文件。

                                  /static :静态资源文件夹。

                                 /templates: 模板资源文件夹

    运行SpringBoot 项目:

    点击启动类的 main ⽅法就可以运⾏ Spring Boot 项⽬了:

    启动成功如下图所示:

     Spring 是一个普通的 Java 项目,没办法直接和浏览器进行互动,我们需要使用 SpringBoot 来实现和浏览器及用户的交互。

    以输出最简单的:Hello word 为例。

    在创建的项目包路径下(demo包下)创建UserController类,代码如下:

    1. @Controller // 五大类注解之一
    2. @ResponseBody // 加在类上 表示当前类中的所有方法返回的都是非静态页面的数据
    3. @RequestMapping("/user")
    4. public class UserController {
    5. @RequestMapping("/hi")
    6. public String sayHi() {
    7. return "Hello World";
    8. }
    9. }

    @ResponseBody 的作用: 将方法的返回值以特定的格式写入到response的body区域,进而将数据返回给客户端,如果不加这个注解,底层会将方法的返回值封装成ModelAndView对象。

     @RequestMapping 注解 相当于 @WebServlet("/url") 注解,表示将一个路径和这个类关联起来。

     需要注意的是 @WebServlet 注解只能使用在一个类上,而@RequestMapping 注解即可以加在类上,又可以加在方法上。

    @RequestMapping 注解加在类和方法上就需要使用 类url+方法url 进行访问。

    @RequestMapping 注解直接加在方法上,就使用方法完整的url 进行访问。

    这里的@Controller 注解和 @ResponseBody 注解可以使用一个注解@RestConrtoller 来表示:

    查看@RestController 注解源码会发现:

     

     此时重新启动项目,在浏览器中输入URL:127.0.0.1:8080/user/hi 最终执行效果:

     需要注意的是:

    这里的UserController 类的路径一定要保证正确,需要确保是创建在demo包下的、和启动类DemoApplication 同级。否则就会报错:

    这说明 Spring Boot 项目没有将对象注⼊到容器中。 

    以上就是SpringBoot 项目的创建以及使用。


    🐭三、SpringBoot配置文件

    在一个项目中,所有的重要数据都是在配置文件中配置的,例如:数据库的连接信息,项目的启动端口等。所以配置文件是非常重要的。

    SpringBoot 配置文件主要有两种风格:

    1).properties

    2).yml

     如图所示:

     properties 类型的配置属于老版本,也是创建SpringBoot 项目默认的文件格式,而yml属于新版本。

    properties 和 yml 可以在一个项目中共存,如果此时两个配置文件中出现同样的配置,比如说:properties 和 yml 中都配置了“server.port”(端口号),那么这个时候会以 properties 中的配置为主,也就是说 .properties 配置文件的优先级最高,但加载完 .properties 文件以后,也会加载 .yml 文件的配置信息。

    如下图所示:这里.properties 文件 和 .yml 都配置了端口号,但是以 .properties 配置文件为主,端口号是7777。

    虽然这两种配置文件可以共存,但是在实际开发中,为了便于维护,还是使用一种配置文件较为稳妥。

    1. properties 基本语法:

    properties 是以键值的形式配置的,key 和 value 之间 是以“ = ”连接的,如:

    1. # 连接数据库
    2. spring.datasourse.url=jdbc:mysql://127.0.0.1:3306/use?characterEncoding=utf8
    3. spring.datasource.username=root
    4. spring.datasource.password=root

    配置文件中使用 # 来添加注释信息。需要注意的是:

    在 .properties 文件中使用中文进行注释,会出现乱码的情况,需要设置编码为utf8。

    设置当前项目编码格式步骤如下:

     此时需要删除当前项目的 . properties 文件,重新进行创建 .properties 文件,这样就不会发生乱码的情况。

    设置新项目的编码格式步骤如下:

     

     .yml 文件在创建成功以后,默认就是utf8,但是可以进行修改:

    如果在项目中想要主动读取配置文件中的内容,可以使用@Value 注解来实现。

    @Value 注解使用格式: “${}”:

     代码如下:

    1. @RestController
    2. @RequestMapping("/user")
    3. public class UserController {
    4. @Value("${server.port}")
    5. private String port;
    6. @RequestMapping("/hi")
    7. public String sayHi() {
    8. return "System.port:"+port;
    9. }
    10. }

     运行项目,使用url进行访问,效果如图所示:

     properties 配置的缺点: 有大量的冗余信息,比如在配置数据库连接信息的时候:

    2. yml 基本语法:

    yml 是YAML 的缩写,全称是:Yet Another Markup Language,翻译如下:

    创建 配置文件时,后缀名是 .yml 或者 .yaml 都是可以的。

    yml 是树形结构的配置文件,基本语法是:“key: value” ,key 和 value 之间使用英文 : 加空格的方式组成的,空格不能省略。

    如:

    1. # 连接数据库
    2. spring:
    3. datasource:
    4. url: jdbc:mysql://127.0.0.1:3306/use?characterEncoding=utf8
    5. username: root
    6. password: root

    在yml 中还可以配置不同的数据类型以及null:

    1. # 字符串
    2. string.value: Hello
    3. # 布尔值,truefalse
    4. boolean.value: true
    5. boolean.value1: false
    6. # 整数
    7. int.value: 10
    8. int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制
    9. # 浮点数
    10. float.value: 3.14159
    11. float.value1: 314159e-5 # 科学计数法
    12. # Null,~代表null
    13. null.value: ~

     yml 读取配置的方式和 properties 相同,使用 @Value 注解即可:

    读取上述字符串 Hello:

    启动项目,输入URL,执行结果如下: 

     还可以在 yml 中配置对象,代码如下:

    1. student:
    2. id: 1
    3. name: zhangsan
    4. age: 18

    此时不能使用 @Value 注解来读取配置中的对象了,而是使用@ConfigurationProperties 读取。

    创建一个类,这个类中的属性必须和yml配置中的对象的属性一一对应

    1. @ConfigurationProperties("student")
    2. @Component // 添加注解,随着spring的启动而启动,进行加载配置文件中的内容 通过setter方法对属性赋值
    3. public class Student {
    4. private int id;
    5. private String name;
    6. private int age;
    7. public int getId() {
    8. return id;
    9. }
    10. public void setId(int id) {
    11. this.id = id;
    12. }
    13. public String getName() {
    14. return name;
    15. }
    16. public void setName(String name) {
    17. this.name = name;
    18. }
    19. public int getAge() {
    20. return age;
    21. }
    22. public void setAge(int age) {
    23. this.age = age;
    24. }
    25. }

     

     然后将这个Student类,使用属性注入的方式注入到UserController类中:

    1. @RestController
    2. @RequestMapping("/user")
    3. public class UserController {
    4. @Autowired
    5. private Student student;
    6. @RequestMapping("/hi")
    7. public String sayHi() {
    8. System.out.println(student.getId());
    9. System.out.println(student.getName());
    10. System.out.println(student.getAge());
    11. return null;
    12. }
    13. }

    此时,输入URL,查看控制台打印信息:

     

    注:这里的getter 和 setter 方法一定不能省略。 

    .yml 的优点:

    1).yml 可读性高,易于理解、写法简单。

    2).yml 支持更多的数据类型,它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。

    3).yml 支持更多的编程语言,它不⽌是 Java 中可以使用在 Golang、PHP、Python、Ruby、 JavaScript、Perl 中。


    🐭四、SpringBoot日志文件

    1.日志的作用:

    日志是程序的重要组成部分,日志最主要的用途就是排错和定位问题。

    除了发现和定位问题以外,还可以通过日志实现以下功能:

    记录用户登录日志,方便分析用户是正常登录还是恶意破解用户。

    记录系统的操作日志,方便数据恢复和定位操作⼈。

    记录程序的执行时间,方便为以后优化程序提供数据支持。

     SpringBoot 项目在启动的时候默认就有日志输出,如下图:

     上图中的内容就是 SpringBoot 输出的控制台日志信息。

    2.自定义日志打印

    自定义日志打印的实现步骤,可以分为两步:

    1).在程序中得到日志对象。

    2).使用日志对象的相关语法输出要打印的内容。

    首先来看如何在程序中得到日志对象。

    因为SpringBoot 内置了 日志框架 slf4j,所以可以在程序中调用 slf4j 来输出日志。

    代码如下:

    1. @RestController
    2. @RequestMapping("/user")
    3. public class UserController {
    4. private static final Logger log = LoggerFactory.getLogger(UserController.class);
    5. @RequestMapping("/hi")
    6. public String sayHi() {
    7. log.trace("I am trace");
    8. log.debug("I am debug");
    9. log.info("I am info");
    10. log.warn("I am warn");
    11. log.error("I am error");
    12. return null;
    13. }
    14. }

     需要注意的是,这里的Logger 类是 slf4j 提供的,需要导入包。

    使用日志工厂 LoggerFactory 获取日志对象,这里的参数有两种设置方式,一个是

    当前类名.class   ,另一个是可以直接起别名。推荐使用 当前类名.class,这样的日志打印信息比较全。

    启动项目以后,输入URL,查看IDEA控制台打印信息,如下图:

    观察打印结果会发现,只打印了三个日志信息,并不是五条信息,这就不得不提到日志的级别了:

    日志的级别分为:

    trace:微量,少许的意思,级别最低;

    debug:需要调试时候的关键信息打印;

    info:普通的打印信息(默认日志级别);

    warn:警告,不影响使⽤,但需要注意的问题;

    error:错误信息,级别较高的错误⽇志信息;

    fatal:致命的,因为代码异常导致程序退出执行的事件,级别最高。

    SpringBoot 项目日志级别默认是info,所以说比info级别低的日志信息是不会打印的。

    为什么要设置日志级别呢?

    是因为:日志级别可以帮开发者筛选出重要的信息,比如设置日志级别为 error,那么就可以只看程序的报错日志了,对于普通的调试日志和业务日志就可以忽略了,从而节省开发者信息筛选的时间。

    日志级别设置:

    在配置文件中设置“logging.level” 配置项即可,如下图:

     此时,启动项目,输入URL,查看IDEA控制台打印信息:

     此时会发现,只有 error 级别的日志信息才会打印。

    3.日志持久化

    以上的⽇志都是输出在控制台上的,然而在生产环境上咱们需要将日志保存下来,以便出现问题之后追溯问题,把日志保存下来的过程就叫做持久化。

    想要将日志进行持久化,只需要在配置文件中指定日志的存储⽬录或者是指定日志保存文件名之后,Spring Boot 就会将控制台的日志写到相应的目录或文件下了。

    设置日志目录,代码如下:

    1. # 设置日志文件的目录
    2. logging.file.path=D:\\log

    启动项目,输入URL 以后,查看上述目录下会生成一个spring.log 文件,打开以后会查看到所有的日志信息,如下图:

     设置日志文件名,代码如下:

    1. # 设置日志文件的文件名
    2. logging.file.name=D:\\log\\mySpringBootLog.log

    启动项目,输入URL以后,上述目录下会生成一个mySpringBootLog.log 文件:

    日志信息如下:

     当再次启动项目,输入URL以后,会发现后续的日志打印信息并不会覆盖之前的日志信息,而是会追加到后面:


  • 相关阅读:
    职场中的“显眼包”却是领导的心头宝!
    《深入分布式缓存 从原理到实践》笔记
    如何定位线上CPU占用过高的问题
    定时获取每天早盘数据并自动拼接整理存
    阿里云Serverless 应用引擎SAE助力上云
    为什么要做数据可视化
    linux配置静态ip ip和网关不在同一个网段
    [Druid-1.2.11源码系列]-9-Druid销毁线程
    跨境电商热潮:宣传与真实情况有何不同?
    外包就干了2个月,技术退步明显....
  • 原文地址:https://blog.csdn.net/qq_54469537/article/details/130791477