Spring Boot

目录

什么是Spring Boot?

创建 Spring Boot 项目

Spring Boot 项目的创建 (网页版) 

运行 Spring Boot 

Spring Boot 配置文件

配置文件的作用 

配置文件的格式

properties

yml

properties 与  yml 的区别

设置不同环境的配置文件

日志

使用日志

日志的级别

日志级别的设置

日志调用的过程

日志的持久化

使用 lombok 输出日志


什么是Spring Boot?

Spring Boot是由 Pivotal 团队提供的框架 . 其目的就是为了简化 Spring 程序开发的 .让 本质上是为了让 Spring 开发更方便 , 让程序猿考虑的事情更少 .

Spring Boot 的核心 : 1. 快速添加依赖 2. 内置 web 容器 3. 自动装配 (例如在Servlet 时, 将数据库连接写死, 而 Spring Boot 时, 则是写在配置文件中,由 Spring Boot 根据这些连接信息自动构建一个 datasource对象等等,它就是一种机制, 简单来讲就是 Spring Boot 帮助我们自动构建对象 , 构建好的对象直接就可以使用

Spring Boot 的优点 :

1 . 快速的继承框架 , Spring Boot 提供了启动添加依赖的功能 .(在创建项目的时候就可以进行勾选依赖,不需要再去 Maven 中央仓库去导了)

2 . 内置了运行容器 , 无需配置 Tomcat , 直接就可以运行和部署程序.

3 . 快速部署项目 , 无需外部容器即可启动并运行项目 .(也就是不需要再将项目打包成 jar 去部署到服务器上.)

4 . 使用注解和配置的方式进行开发 . (不用再去使用Spring时代繁琐的 xml 方式)

5 . 支持更多的监控的指标 , 可以更好的了解项目的运行情况 .

创建 Spring Boot 项目

步骤 : 

1 . 安装 Spring Boot Helper 插件

2 .  新建项目 --> 勾选 Spring Initializr -->  选择参数 ---> 选择依赖 --> 加载依赖

选择的依赖中 : 

Spring Boot DevTools 是用来做热部署的 (热部署的目的是不需要每次取重启项目, 配置好热部署后它会自动重新启动项目)

Spring Web 是让这个项目具备 Http 能力

Spring Boot 项目的创建 (网页版) 

通过https://start.spring.io/ , 这个地址 我们就可以创建Spring Boot 项目了

介绍一下 Spring Boot 项目下的 文件 :

 创建好之后 , 启动入口就是带有 @SpringBootApplication 注解的类. 这个类是Spring Boot 项目自带的类 .

约定 : 

在之前的Spring 项目中, 我们是在配置文件中去设置的扫描路径 , Spring 会将扫描路径下的所有带有5大注解的类将它们都注册到Spring IoC容器中, 但是在Spring Boot 中, 不需要再去设置扫描路径, 而是将启动类同级目录下类包括子级的类注册到 Ioc 容器中 。这是Spring Boot 中的规定 。约定大于配置

运行 Spring Boot 

创建一个测试类 :

@Controller // 控制器
@ResponseBody // 加上这个注解表示返回的是数据, 而非页面
public class TestController {
    @RequestMapping("/hi") // url 路由注册
    public String hi(String name) {
        return "你好呀, " + name;
    }
}

启动Spring Boot 项目 , 通过浏览器来访问这个 路由地址.

在 IDEA 的打印日志中 可以得到一些关键信息 : 

Spring Boot 配置文件

Spring Boot 配置文件 主要分为两种 :

1. 系统配置文件 : 系统使用的配置文件 (例如 : 端口号的设置. 连接数据库的配置)

2. 用户自定义配置文件 .

配置文件的作用 

整个项目中所有重要的数据都是在配置文件中配置的 。例如 :

1. 数据库的连接信息 (用户名 和 密码 的设置)。

2. 项目的启动端口 。(可以在配置文件中去配置项目的启动端口)

3. 第三方系统的调用密钥等信息。

4. 用于发现和定位问题的普通日志和异常日志等。

换个角度想 : 如果没有配置文件那么Spring Boot 项目就不能连接和操作数据库 , 也不能去保存可以用于排查问题的关键日志 。 

配置文件的格式

Spring Boot 配置文件主要分为以下两种格式 :

1 .  .properties

2 .  .yml (yaml)

注意 : 当一个项目中存在两种格式的配置文件, 并且两个配置文件中设置了相同的配置项,但值不同时, 那么 properties 的优先级更高 , 因此通常情况下一个项目中只会存在一种格式的配置文件 .

properties

properties 是以键值的形式进行配置的. ( Key = value )

用户自定义配置文件

# 自定义配置
hisname=lisi

 通过代码来获取这个自定义配置

使用 @Value 注解来获取配置文件中的内容,

格式 : @Value("${}")

@Controller // 控制器
@ResponseBody // 加上这个注解表示返回的是数据, 而非页面
public class TestController {
    @Value("${hisname}") // 使用 @Value 注解来获取自定义配置属性
    private String hisname;
    @RequestMapping("/gethisname")
    public String gethisname() {
        return hisname;
    }
}

 页面访问结果 :

properties 的缺点

如果 用户自定义中出现了 中文, 那么获取时可能就会出现乱码现象.

# 自定义配置
hisname=张三

yml

yml 的写法

# 配置数据库
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8
    username: root
    password: 111111

同样我们可以使用 @Value 注解来获取自定义配置.

# 自定义配置项
hername: xiaohua
@Controller // 控制器
@ResponseBody // 加上这个注解表示返回的是数据, 而非页面
public class TestController {
    @Value("${hername}")
    private String hername;
    @RequestMapping("/gethername")
    public String getHername() {
        return hername;
    }
}

 yml 中 单引号 没有引号 双引号 

# 自定义配置项
string:
  t1: "my name is \n zhangsan"
  t2: 'my name is \n zhangsan'
  t3: my name is \n zhangsan
@Controller // 控制器
@ResponseBody // 加上这个注解表示返回的是数据, 而非页面
public class TestController {
    @Value("${string.t1}")
    private String t1;
    @Value("${string.t2}")
    private String t2;
    @Value("${string.t3}")
    private String t3;

    @RequestMapping("/test")
    public String test() {
        System.out.println("t1: " + t1);
        System.out.println("t2: " + t2);
        System.out.println("t3: " + t3);
        return t1;
    }
}

控制台上的打印结果 :

根据打印结果可以看出 : 加上双引号在控制台打印时 \n 会被当做是换行符. 但是在单引号没没有引号的情况下则认为它是一个普通字符 不会进行转义.

yml 配置 对象

使用 yml 可以进行配置对象 , 使用 @ConfigurationProperties (prefix = "") 来获取对象

注意事项 :

1 . yml 中配置的 key值 要与 java 代码中的对象属性名一致.

2 . java 中的对象必须提供 setter 和 getter 方法 (否则 yml 的值就不能成功赋值给java对象).

示例 :

# 自定义配置项
student:
  id: 999
  name: 张三
  age: 21
# 也可以采用行内的写法: student: {id: 999, name: 张三, age: 21}
@Component
@ConfigurationProperties("student")
@Data // lombok中的注解 : 提供了getter 和 setter 以及 toString 方法
public class Student {
    private int id;
    private String name;
    private int age;
}


@Controller // 控制器
@ResponseBody // 加上这个注解表示返回的是数据, 而非页面
public class TestController {

    @Autowired
    private Student student;

    @RequestMapping("/getStudent")
    public String getStudent() {
        return student.toString();
    }
}

 访问结果 :

另外 yml 也可以配置 集合 : 

# 自定义集合
mylist:
  nums:
    - 12
    - 22
    - 33


@Component
@ConfigurationProperties("mylist")
@Data
public class Mylist {
    private List<Integer> nums;
}


@Controller // 控制器
@ResponseBody // 加上这个注解表示返回的是数据, 而非页面
public class TestController {

    @Autowired
    private Mylist mylist;

    @PostConstruct
    public void test() {
        System.out.println(mylist.toString());
    }
}

控制台的打印信息 :

properties 与  yml 的区别

相同点 : 都是 SpringBoot 项目的配置文件

不同点 : 二者诞生的时间不同 , properties 是默认的配置文件 诞生较早 ,存在一定的冗余数据.  而 yml 它是后来才出来的一种标记语言 , 可以很好的解决数据冗余的问题 .

语法上的区别 : properties 采用 key = value 的形式. yml 使用的是 key: value 的形式. (类似于 json 的格式) . yml 的通用性更好 (支持多种语言) . yml 支持更多的数据类型 . yml 对于中文的兼容性更好 ! 而 properties 对中文的兼容性更差 .

设置不同环境的配置文件

步骤 : 新建一个新的配置文件, 命名规则: application-"这里进行命名".yml

每次需要更改环境时, 只需要在application.yml 中进行调整

命令: spring: {profiles: {active: "这里填写要更改的环境名, 只需要写 - 之后的名字"}} .

日志

日志最主要的用途就是排除和定位问题 , 帮助程序猿去解决问题 .

另外日志还有以下实用的功能 : 

1 . 记录用户登录日志 , 用来分析用户是正常登录还是恶意破解用户 .

2 . 记录系统的操作日志 , 方便数据恢复和定位操作人 .

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

 

使用日志

使用 LoggerFactory 类 获取日志对象.

注意在导包的时候 , 不要选错 :

 

@Controller
@ResponseBody
public class UserController {

    // 1. 得到日志对象
    private static final Logger logger = LoggerFactory.getLogger(UserController.class);

    // 使用日志对象来打印日志
    @RequestMapping("/printLogger")
    public String printLogger() {
        // 写日志
        logger.trace("这是 trace");
        logger.debug("这是 debug");
        logger.info("这是 info");
        logger.warn("这是 warn");
        logger.error("这是 error");
        return "Ok";
    }

}

 

控制面板只打印了3个日志内容的原因是  : 项目默认的打印级别是 info 

解释如下 :

日志的级别

设置日志级别的作用

1 . 快速的筛选重要的日志

2 .不同环境实现不同日志的级别

级别 : (从低到高)

trace : 级别最低

debug : 一般在调试的时候打印关键信息

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

warn : 警告 , 一些警告信息 , 但是不影响程序的正常使用

error : 错误信息 .

fatal : 致命的 , 因为代码异常导致程序退出执行的事件 .

程序在打印日志时 , 只会打印当前设置的日志级别以及更高级别的日志级别.

日志级别的设置

# 设置日记级别
logging:
  level:
    root: error
    com:
      example:
        controller: trace

System.out.println 相比 日志 有两个缺点 :

1 . 打印的信息不全 (没有打印日志的时间, 没有打印日志的来源)

2 . 不能实现日志打印的隐藏和显示

3 . System.out.println 打印的日志不能被持久化

日志调用的过程

具体实现是由 logback 实现 , 不让开发者直接调用 logback 的原因就是为了解耦 SLF4J 就像是一个中间人 , 它的作用是为了承上启下 . (例如, 如果让开发者直接去调用logback , 某一时间突然 logback 出现了漏洞 , 这时开发者就要去找其他日志实现的类, 但难点在于 其他日志实现的接口都是不一样的, 修改起来极其麻烦, 因此让 SLF4J 去对接这些接口 , 再由开发者去对接SLF4J , 更好的实现了解耦)

日志的持久化

将日记报告保存到 磁盘中 .

1. 设置日志的保存目录

# 设置日志的保存路径
logging:
  file:
    path: D:\\log

每次的日志都会追加到这个文件下 , 不会覆盖 , 这个文件的默认大小为 10 MB 时, 超过这个大小 , 则Spring Boot 会新建一个保存日志的文件 , 默认情况下目录下的日志文件个数为 7 个 .

2 . 设置日志的保存文件

# 设置日记级别
logging:
  file:
    name: springboot-logs.log

则会放到项目的根目录下 :

使用 lombok 输出日志

使用 @Slf4j 就可以代替 private static final Logger logger = LoggerFactory.getLogger()

在类上加上 @Slf4j 注解 后, 它默认就会提供一个 log 对象 , log 就会有 trace , debug....方法.

@Controller
@ResponseBody
@Slf4j
public class UserController {
    // 1. 得到日志对象
//    private static final Logger logger = LoggerFactory.getLogger(UserController.class);
    // 使用日志对象来打印日志
    @RequestMapping("/printLogger")
    public String printLogger() {
        // 写日志
        log.trace("这是 trace");
        log.debug("这是 debug");
        log.info("这是 info");
        log.warn("这是 warn");
        log.error("这是 error");
        return "Ok";
    }
}

End...... 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值