springboot权限管理系统 学习(三)

Logback的特点

1,重启的实现2,非常充分的测试3,文档充分4,自动重新加载配置等

开发步骤

1,/资源目录下新建logback-spring.xml 2,布局配置的规则logback-spring.xml 3,/资源目录下新建application.yml(application.properties)4,配置项目环境和日志记录(Dev [开发]测试[测试]专业[项目])

Logback的常规配置

1,配置:root根目录-appender:负责写日志的组件(0–多个)-logger:使用设置某一个类的日志打印等级(0–多个)-root:是根logger(只能有一个)2,等级从低到高分别是跟踪<调试<信息<警告<错误<fatal如果设置的是调试的话,跟踪将不会被打印3,在application.yml里面配置文件打印的地址。

logback.spring.xml的终版配置

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration  scan="true" scanPeriod="10 seconds">

    <!--<property name="log.path" value="E:\IDEA\log\demolog" />-->
    <springProperty scope="context" name="log.path" source="logging.path" defaultValue="/home/logs/bms"/>
    <contextName>logback</contextName>

    <!-- 彩色日志 -->
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />

    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <!--输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--输出到文件-->
    <!-- 时间滚动输出 level为 DEBUG 日志 -->
    <!--RollingFileAppender的作用是滚动记录文件,先将日志记录到指定文件,当符合某个条件时再将日志记录到其他文件-->
    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_debug.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <!--
                   日志输出格式:
                   %d表示日期时间,%thread表示线程名,%-5level:级别从左显示5个字符宽度
                   %logger{50} 表示logger名字最长50个字符,否则按照句点分割。
                   %msg:日志消息,%n是换行符
            -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <!-- <rollingPolicy>的作用是当发生滚动时,定义RollingFileAppender的行为,其中TimeBasedRollingPolicy是最常用的滚动策略,它根据时间指定滚动策略,既负责滚动也负责触发滚动-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志归档 -->
            <fileNamePattern>${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录debug级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
            <!-- <onMatch>:用于配置符合过滤条件的操作 -->
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 时间滚动输出 level为 INFO 日志 -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_info.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志归档路径以及格式 -->
            <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录info级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 时间滚动输出 level为 WARN 日志 -->
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_warn.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录warn级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <!-- 时间滚动输出 level为 ERROR 日志 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_error.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录ERROR级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--
        <logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender><logger>仅有一个name属性,
        一个可选的level和一个可选的addtivity属性。
        name:用来指定受此logger约束的某一个包或者具体的某一个类。
        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
              还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
              如果未设置此属性,那么当前logger将会继承上级的级别。
        addtivity:是否向上级logger传递打印信息。默认是true。
    -->
    <!--<logger name="org.springframework.web" level="info"/>-->
    <!--<logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>-->
    <!--
        使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
        第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
        第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:
     -->


    <!--
        root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
        不能设置为INHERITED或者同义词NULL。默认是DEBUG
        可以包含零个或多个元素,标识这个appender将会添加到这个logger。
    -->

    <!-- 多环境配置管理 -->
    <!--开发环境:打印控制台-->
    <springProfile name="dev">
        <root level="info">
         <!--<logger name="com.nmys.view" level="debug"/>-->
            <appender-ref ref="CONSOLE"  />
            <appender-ref ref="DEBUG_FILE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
        </root>
    </springProfile>
    <!--线上环境:-->
    <springProfile name="prod">
        <root level="info">
            <appender-ref ref="CONSOLE"  />
            <appender-ref ref="DEBUG_FILE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
        </root>
    </springProfile>
    <!--测试环境:-->
    <springProfile name="test">
        <root level="info">
            <appender-ref ref="DEBUG_FILE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
        </root>
    </springProfile>

</configuration>

Spring数据

Spring Data是什么?

1,主要做的是对mybatis其中一个,进行对数据库的访问和操作,并进行持久化存储和访问![在这里插入图片描述](https://img-blog.csdnimg.cn/20200125155141738。PNG ?X-OSS-过程=图像/水印,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hvbmd3ZWlzb25nNjj70,size_16,color_FFFFFF,t_

Spring Data的子项目

此时1所示,弹簧数据JDBC 2,弹簧数据JPA等等

Mybatis

Mybatis数据操作的步骤

1,JDBC(Java数据库连接,简称JDBC)的操作流程五个步骤:编写SQL->预编译->设置参数->执行SQL->封装结果
2,JPA操作流程JavaBean->(在JDBC的总之前封装)-> DB只需要操作JavaBean就可以操作DB

Ⅰ、MyBatis是支持定制化SQL、存储过程以及高级映射的持久层框架
Ⅱ、Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。

Mybatis功能结构

1、接口层:提供API,增删改查等接口
2、数据处理层:完成对数据库的操作
3、数据支撑层:连接管理、事务管理、配置加载等
在这里插入图片描述

Mybatis架构结构

1、配置configuration,去读取mappler.xml等映射,有两种读取方式,分别是 mapper.Annotations 和SqlMap.xml来读取
实际项目中:Ⅰ、比较简单的用mapper.annotations Ⅱ、数据操作比较复杂的使用SqlMap.xml
2、在Mapper.Statement里面会有一个SqlID,左边的sql输入映射的参数,传入后通过Mapper.Statement会有输出的映射结果,如HashMap等
3、首先的话,完成Sql的编写(一是采用Mapper.annotations的方式来编写,二是采用SqlMap.xml的方式来编写)
;其次的话,要定义输入参数的类型(HashMap,Pojo,String,Integer等基本类型)
;最后的话,定义输出的类型(HashMap,Pojo,String,Integer等基本类型)

草图如下:
在这里插入图片描述

在这里插入图片描述

Springboot整合Mybatis

1、引入所需要的启动器(MySql和mybatis)
2、配置数据源(数据源要访问到MySql的数据库 )
3、配置Mybatis(配置javaBean,要映射到数据表;配置Mapper,用来定义Sql的一些行为)
4、编写实体类 根据User类,主要和第三部分的javaBean有关;
5、编写mapper映射接口:主要和第三部分的Mapper有关;
6、编写测试代码(通过junit来测试)

编写:

1、在com.hws.demo目录下面新建一个model文件,用来存放javaBean等代码,可以建立一个BaseEntity类,用来存放所有的表中一些通用的字段,一些其它的就可以继承它,减少代码量,像ID,createTime和updateTime都是必须的字段,就放在BaseEntity里面就可以了,然后在前面写上 @Data (在lombok里面的,减少了getter和setter的使用)

@Data
public abstract class BaseEntity<ID extends Serializable> implements Serializable {
    private static final long serialVersionUID = 8925514045582235838L;

    private ID id;
    private Date createTime = new Date();
    @JsonFormat(pattern = "yyyy-MM-dd  HH:mm:ss")
    private Date updateTime = new Date();

}

2、编写实体类(model),具体数据库表里面的信息字段,以sys_user表为例
使用 @EqualsAndHashCode(callSuper = true) 此注解会生成equals(Object other) 和 hashCode()方法

@Data
@EqualsAndHashCode(callSuper = true)
public class SysUser extends BaseEntity<Long>  {
    private static final long serialVersionUID = -6525908145032868837L;
    private String username;
    private String password;
    private String nickname;
    private String headImgUrl;
    private String phone;
    private String telephone;
    private String email;
    @JsonFormat(pattern = "yyyy-MM-dd  HH:mm:ss")
    private Date birthday;
    private Integer sex;
    private Integer status;

    public interface Status {
        int DISABLE = 0;
        int VALID = 1;
        int LOCKED = 2;
    }

3、编写dao(里面放入mapper)

@Mapper
public interface UserDao {
    @Select("select * from sys_user t where t.username = #{username}")
    SysUser getUser(String username);
}

4、在编写测试代码的时候,用@Resource 引入,若用 @Autowired方式引入的话,会有错误

yml的小问题

这里又要着重记一下了,解决yml前面没有绿色的小叶子的问题,1、首先的话,先去plugin里面把yaml的插件下载下来,我是下载了这两个
2、去file types下面在yaml里面添加.yml,至此才算最终完成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、这里再插播一个yml的坑,它NN的,格式不能错,然后空格之类的都不能错,一错就连不上数据库了,终于,经过了修改yml配置文件里面的信息,终于能够成功连接上我自己阿里云上面的数据库了,开心~~,附yml格式代码
在这里插入图片描述

spring:
  profiles:
    active: dev

  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://(阿里云分配的外网地址):12345/hws_quanxian?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
    username: root
    password: aliyun123456
    platform: mysql

mybatis:
  type-aliases-package: com.hws.demo.model
  mapper-locations: classpath:/mybatis-mappers/*
  configuration:
    mapUnderscoreToCamelCase: true

logging:
  path: E:\IDEA\log\demolog

这里附上一个Springboot集成Mybatis的链接,方法是这个上面找到的,我的错误也是这个(空格和Tab的错误,格式不规范,哎):Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded

https://blog.csdn.net/nuomizhende45/article/details/84678976

发布了12 篇原创文章 · 获赞 2 · 访问量 1548

猜你喜欢

转载自blog.csdn.net/hongweisong666/article/details/104083419