0
点赞
收藏
分享

微信扫一扫

Android Studio的笔记--布局文件

微笑沉默 2024-04-30 阅读 17

文章目录

Druid高性能数据库连接池?SpringBoot整合MyBatis整合SpringMVC整合Druid

异常记录

项目启动的时候报了下图中的错误,如下图:
在这里插入图片描述
org/springframework/boot/bind/RelaxedPropertyResolver。
为什么会报这个错误呢?因为我们pom.xml文件中没有引入spring-boot-starter-parent父版本,引入之后就好了 如下图:
在这里插入图片描述
重新启动,如下图:
在这里插入图片描述

spring-boot-starter-parent作用

spring-boot-starter-parent 是一个 Maven 项目中用于构建 Spring Boot 应用程序的父项目。它提供了一种标准化的方式来管理和配置 Spring Boot 应用程序的依赖项、插件和默认设置。

spring-boot-starter-parent 的作用包括:

  1. 继承默认的 Maven 父项目:spring-boot-starter-parent 继承了 Maven 的默认父项目,这意味着你可以利用 Maven 的功能,并继承了一些默认的 Maven 配置。
  2. 默认的依赖项管理:spring-boot-starter-parent 预定义了许多常用的 Spring Boot 相关依赖项,并使用了适当的版本。这样,你在子项目中不需要显式地声明这些依赖项和版本号,而是直接继承父项目中定义的依赖项。
  3. 默认的插件配置:spring-boot-starter-parent 配置了一些常用的 Maven 插件,如编译插件、打包插件等,并使用了适当的配置。这样,你在子项目中可以直接使用这些插件,而无需自己进行复杂的插件配置。

通过使用 spring-boot-starter-parent 作为你的 Maven 父项目,你可以节省很多配置和管理的工作,专注于开发 Spring Boot 应用程序的业务逻辑。同时,它也确保了你的项目和依赖项之间的兼容性,并遵循了 Spring Boot 的最佳实践和规范。

使用了spring-boot-starter-parent作为Maven父项目之后,所有的spring-boot-starter开头的依赖都不用再写版本坐标了,可以直接复用父项目里面的 如下图:
在这里插入图片描述

Druid介绍

Druid是阿里巴巴的一个开源项目,号称为监控而生的数据库连接池,在功能、性能、扩展性方面都超过其他例如DBCP数据库连接池、C3P0数据库连接池。而且Druid已经在阿里巴巴部署了超过600个应用,通过了极为严格的考验,这才收获了大家的青睐!

什么是数据库连接池?

数据库连接池是一个存储数据库连接的缓冲区,用于重复使用这些连接,以避免在每次请求时都创建新的数据库连接。因为每次连接数据库和断开数据库都是非常耗费性能的。

为什么选择Druid数据库连接池

Druid提供了丰富的监控和统计功能,您可以了解连接池的使用情况、SQL执行情况等。这有助于识别性能问题和优化SQL查询。

整合SpringBoot,MyBatis,SpringMVC,Druid到Maven项目的真个流程

pom文件引入依赖

首先快速创建一个Maven项目,然后引入如下pom依赖 如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>druid</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>druid</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.7</version>
  </parent>


  <dependencies>
    <!-- 引入SpringBoot的web模块,引入springBoot自带的tomcat服务器,这样才能启动项目服务,比如启动端口号为8080的服务 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- 下面的这个spring-boot-starter-test本次项目并没有使用到,这里只不过是为了测试一下如果上面引入了SpringBoot应用程序
     的父项目只会,所有的spring-boot-starter开头的依赖是不是都不用写版本号了,测试发现确实是这样的-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <!-- MyBatis和SpringBoot整合 -->
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.2.2</version>
    </dependency>
    <!-- Druid数据库连接池和SpringBoot整合 -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid-spring-boot-starter</artifactId>
      <version>1.2.15</version>
    </dependency>
    <!-- JDBC java用来连接并操作mysql数据库的 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.16</version>
    </dependency>
    <!-- 引入SpringMVC框架 这样就可以在浏览器里面通过写http接口的方式请求我们的项目服务器了 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.3.10</version>
    </dependency>



    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.16.18</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.16</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

在src/main目录下创建resources目录并创建application.properties配置文件

如下图:
在这里插入图片描述
配置文件内容如下:

# 数据源配置
spring.datasource.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver


# MyBatis配置
mybatis.mapper-locations = classpath:mapper/*.xml
mybatis.type-aliases-package=org.example.entity



# Druid数据库连接池配置
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
spring.datasource.druid.filters=stat,wall,log4j
spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

注意这里的url最后一定要写上serverTimezone要不然会报错启动,如下图:
在这里插入图片描述

com.mysql.jdbc.Driver和com.mysql.cj.jdbc.Driver的区别,不带cj的是mysql5版本,带cj的是6及以上。

引入Druid监控面板

只需要在SpringBoot项目中引入一个DruidConfig配置类就可以了,如下图:
在这里插入图片描述

/**
 * @author xuan
 * @create 2024/4/24
 */
@Configuration
public class DruidConfig {
    //配置druid的监控
    //1.配置管理后台的servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
        //druid监控页面的url
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
        Map<String,String> initParams = new HashMap<>();

        initParams.put("loginUsername","druid");   //登陆用户名
        initParams.put("loginPassword","123456");  //密码
        initParams.put("allow","");                //允许哪些ip
        initParams.put("deny","");                 //拒绝ip
        bean.setInitParameters(initParams);
        return bean;
    }
    //2.配置一个web监控的filter,监控sql
    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());

        Map<String,String> initParams = new HashMap<>();
        initParams.put("exclusions","*.js,*.css,*.html,/druid/*");
        bean.setInitParameters(initParams);
        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;
    }

    /**
     * Druid的控制台是监控不了SQL的,解决方案
     * */
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.druid")
    public DataSource druidDataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }
}

启动项目在浏览器输入,localhost:8080/druid即可显示面板 如下图:
在这里插入图片描述
但是会存在一个问题 就是我们的SQL监控中没有已经执行的sql 如下图:
在这里插入图片描述
这里是空的,为什么会这样呢?因为我们使用jdbc连接数据库的时候 并没有指定druid数据库连接池 如下图:
在这里插入图片描述
加上之后如下图:
在这里插入图片描述
重新启动项目 打开druid监控面板 如下图:
在这里插入图片描述
sql面板里面就可以输出我们的mysql的sql语句的执行情况了,如上图。

其它细节

其它细节请参照码云:https://gitee.com/xuanyuanzy/druid

举报

相关推荐

0 条评论