SpringBoot--配置MyBatis、Logback、PagerHelper、Druid

2022-05-30 09:27:23 浏览数 (1)

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

代码语言:javascript复制
    <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启动器
代码语言:javascript复制
        <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包扫描路径
代码语言:javascript复制
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. 定义员工实体类
代码语言:javascript复制
@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接口
代码语言:javascript复制
@Mapper
public interface EmpMapper {
    @Select("select * from emp")
    List<Emp> findAllEmp();
}
5. 定义Service层接口和实现类

接口:

代码语言:javascript复制
public interface EmpService {
    List<Emp> findAllEmp();
}

实现类:

代码语言:javascript复制
@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;

    @Override
    public List<Emp> findAllEmp() {
        return empMapper.findAllEmp();
    }
}
6. 定义Controller层
代码语言:javascript复制
@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

内容为:

代码语言:javascript复制
<?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启动器
代码语言:javascript复制
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.4.2</version>
</dependency>
2. Controller层中定义分页接口
代码语言:javascript复制
    @RequestMapping("findEmpByPage/{pageSize}/{pageNum}")
    @ResponseBody
    public List<Emp> findEmpByPage(@PathVariable("pageSize") Integer pageSize,
                                   @PathVariable("pageNum") Integer pageNum) {
        return empService.findEmpByPage(pageSize, pageNum);
    }
3. Service层实现接口
代码语言:javascript复制
    @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还可以获取额外的信息,如总大小,总页数等

代码语言:javascript复制
    @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启动器
代码语言:javascript复制
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>
2. yml中配置
代码语言:javascript复制
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

0 人点赞