美文网首页J2ee
SpringBoot--配置MyBatis、Logback、Pa

SpringBoot--配置MyBatis、Logback、Pa

作者: aruba | 来源:发表于2022-05-29 17:50 被阅读0次

    上篇SpringBoot--初入SpringBoot中对SpringBoot如何配置有了初步的了解,只需要配置下pom文件,写一个SpringBoot启动类,就可以启动服务进行访问了,再来看下当初的pom文件导入的依赖:

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    

    这边导入了一个spring-boot-starter-web,SpringBoot中称之为启动器,导入该启动器后,就相当于整合了SpringMVC和Spring,而以前复杂的配置都交由SpringBoot管理
    启动器分为两种:

    • 以spring-boot-starter为前缀的启动器:SpringBoot内置的启动器
    • 以spring-boot-starter为后缀的启动器:第三方框架为支持SpringBoot的启动器

    有了这些启动器,配置第三方框架将会变得非常简单

    一、配置MyBatis

    1. 导入MyBatis启动器

            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.1.3</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.21</version>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.12</version>
                <scope>provided</scope>
            </dependency>
    

    2. yml中配置数据库连接信息和MyBatis包扫描路径

    spring:
      datasource:
        url: jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
        username: root
        password: root
        driver-class-name: com.mysql.cj.jdbc.Driver
    
    mybatis:
      mapper-locations: classpath:mybatis/*.xml #指定映射文件路径
      type-aliases-package: com.aruba.bean
    

    3. 定义员工实体类

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Emp implements Serializable {
        /**
         * 员工编号
         */
        private Integer empno;
        /**
         * 姓名
         */
        private String ename;
        /**
         * 职位
         */
        private String job;
        /**
         * 上级
         */
        private Integer mgr;
        /**
         * 入职日期
         */
        private Date hiredate;
        /**
         * 薪水
         */
        private Double sal;
        /**
         * 奖金
         */
        private Double comm;
        /**
         * 部门编号
         */
        private Integer deptno;
    }
    

    4. 定义Mapper接口

    @Mapper
    public interface EmpMapper {
        @Select("select * from emp")
        List<Emp> findAllEmp();
    }
    

    5. 定义Service层接口和实现类

    接口:

    public interface EmpService {
        List<Emp> findAllEmp();
    }
    

    实现类:

    @Service
    public class EmpServiceImpl implements EmpService {
        @Autowired
        private EmpMapper empMapper;
    
        @Override
        public List<Emp> findAllEmp() {
            return empMapper.findAllEmp();
        }
    }
    

    6. 定义Controller层

    @Controller
    public class EmpController {
        @Autowired
        private EmpService empService;
    
        @RequestMapping("findAllEmp")
        @ResponseBody
        public List<Emp> findAllEmp() {
            return empService.findAllEmp();
        }
    
    }
    

    浏览器访问:

    二、配置Logback

    SpringBoot默认使用Logback作为日志管理,web启动器中集成了它,只需要在resources目录下新建配置文件:logback.xml

    内容为:

    <?xml version="1.0" encoding="UTF-8" ?>
    <configuration>
        <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
        <property name="LOG_HOME" value="${catalina.base}/logs/"/>
        <!-- 控制台输出 -->
        <appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender">
            <!-- 日志输出格式 -->
            <layout class="ch.qos.logback.classic.PatternLayout">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
                </pattern>
            </layout>
        </appender>
        <!-- 按照每天生成日志文件 -->
        <appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--日志文件输出的文件名-->
                <FileNamePattern>${LOG_HOME}/server.%d{yyyy-MM-dd}.log</FileNamePattern>
                <MaxHistory>30</MaxHistory>
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
                </pattern>
            </layout>
            <!--日志文件最大的大小-->
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>10MB</MaxFileSize>
            </triggeringPolicy>
        </appender>
    
        <!-- 日志输出级别 -->
        <root level="info">
            <appender-ref ref="Stdout"/>
            <!--暂时不需要输出到文件-->
            <!--<appender-ref ref="RollingFile"/>-->
        </root>
    
        <logger name="com.aruba.mapper" level="DEBUG"></logger>
    
    
        <!--日志异步到数据库 -->
        <!--<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
                日志异步到数据库
                <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
                   连接池
                   <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
                      <driverClass>com.mysql.jdbc.Driver</driverClass>
                      <url>jdbc:mysql://127.0.0.1:3306/databaseName</url>
                      <user>root</user>
                      <password>root</password>
                    </dataSource>
                </connectionSource>
          </appender> -->
    
    </configuration>
    

    需要修改的为logger标签中的包名

    三、配置PageHelper

    PageHelper是一个帮助我们进行分页操作的框架,配置了PageHelper,在Mapper中进行分页只需要一行代码

    1. 导入PageHelper启动器

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.4.2</version>
    </dependency>
    

    2. Controller层中定义分页接口

        @RequestMapping("findEmpByPage/{pageSize}/{pageNum}")
        @ResponseBody
        public List<Emp> findEmpByPage(@PathVariable("pageSize") Integer pageSize,
                                       @PathVariable("pageNum") Integer pageNum) {
            return empService.findEmpByPage(pageSize, pageNum);
        }
    

    3. Service层实现接口

        @Override
        public List<Emp> findEmpByPage(Integer pageSize, Integer pageNum) {
            PageHelper.startPage(pageNum, pageSize);
            List<Emp> list = empMapper.findAllEmp();
            return list;
        }
    

    对比就增加了PageHelper.startPage(pageNum, pageSize);这一句代码

    调用结果:

    4. 获取其他信息

    PageHelper还可以获取额外的信息,如总大小,总页数等

        @Override
        public List<Emp> findEmpByPage(Integer pageSize, Integer pageNum) {
            Page<Emp> page = PageHelper.startPage(pageNum, pageSize);
            List<Emp> list = empMapper.findAllEmp();
            // Page对象获取
            System.out.println("当前页:" + page.getPageNum());
            System.out.println("总页数" + page.getPages());
            System.out.println("页大小:" + page.getPageSize());
            System.out.println("总记录数:" + page.getTotal());
            System.out.println("当前页数据" + page.getResult());
    
            // PageInfo对象获取
            PageInfo<Emp> empPageInfo = new PageInfo<>(list);
            System.out.println("当前页:" + empPageInfo.getPageNum());
            System.out.println("总页数" + empPageInfo.getPages());
            System.out.println("页大小:" + empPageInfo.getPageSize());
            System.out.println("总记录数:" + empPageInfo.getTotal());
            System.out.println("当前页数据" + empPageInfo.getList());
    
            return list;
        }
    

    控制台打印:

    四、配置Druid

    阿里的德鲁伊连接池,之前以及使用过了,配置也很简单

    1. 导入Druid启动器

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.10</version>
    </dependency>
    

    2. yml中配置

    spring:
      datasource:
        # 使用阿里的Druid连接池
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        # 填写你数据库的url、登录名、密码和数据库名
        url: jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
        username: root
        password: root
      druid:
        # 连接池的配置信息
        # 初始化大小,最小,最大
        initial-size: 5
        min-idle: 5
        maxActive: 20
        # 配置获取连接等待超时的时间
        maxWait: 60000
        # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        timeBetweenEvictionRunsMillis: 60000
        # 配置一个连接在池中最小生存的时间,单位是毫秒
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 1
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        # 打开PSCache,并且指定每个连接上PSCache的大小
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
        filters: stat,wall,slf4j
        # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
        # 配置DruidStatFilter
        web-stat-filter:
          enabled: true
          url-pattern: "/*"
          exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
        # 配置DruidStatViewServlet
        stat-view-servlet:
          url-pattern: "/druid/*"
          # IP白名单(没有配置或者为空,则允许所有访问)
          allow: 127.0.0.1,192.168.8.109
          # IP黑名单 (存在共同时,deny优先于allow)
          deny: 192.168.1.188
          #  禁用HTML页面上的“Reset All”功能
          reset-enable: false
          # 登录名
          login-username: admin
          # 登录密码
          login-password: 123456
    

    配置完后启动,可以进入Druid的管理网页:

    项目地址:

    https://gitee.com/aruba/spring-boot-study.git

    相关文章

      网友评论

        本文标题:SpringBoot--配置MyBatis、Logback、Pa

        本文链接:https://www.haomeiwen.com/subject/evwgprtx.html