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

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

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SpringMVCMyBatis整合可以分为以下几个步骤: 1. 配置数据源:在Spring的配置文件中配置数据库连接池和数据源,如使用c3p0或者Druid。 2. 配置SqlSessionFactory:使用MyBatis提供的SqlSessionFactoryBean,将数据源注入到其中,并配置MyBatis的mapper文件和实体类的包路径。 3. 配置事务管理器:使用Spring提供的事务管理器,如DataSourceTransactionManager。 4. 配置MapperScannerConfigurer:将MyBatis的mapper接口扫描到Spring容器中,并自动注入到需要使用的地方。 5. 配置Controller和Service层:在SpringMVC中配置Controller,Service层注入MyBatis的mapper接口。 6. 编写Mapper接口和Mapper.xml文件:定义Mapper接口,编写Mapper.xml文件,实现与数据库的交互操作。 具体配置代码如下: 1. 配置数据源和连接池 ``` <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driverClassName}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <!-- c3p0连接池的一些参数配置 --> <property name="acquireIncrement" value="5"/> <property name="initialPoolSize" value="10"/> <property name="minPoolSize" value="5"/> <property name="maxPoolSize" value="20"/> <property name="maxIdleTime" value="3000"/> </bean> ``` 2. 配置SqlSessionFactory ``` <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="typeAliasesPackage" value="com.example.model"/> <property name="mapperLocations" value="classpath*:mapper/*.xml"/> </bean> ``` 3. 配置事务管理器 ``` <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> ``` 4. 配置MapperScannerConfigurer ``` <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.example.dao"/> </bean> ``` 5. 配置Controller和Service层 ``` @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/list") public ModelAndView list() { ModelAndView mav = new ModelAndView("user/list"); List<User> userList = userService.getUserList(); mav.addObject("userList", userList); return mav; } } @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public List<User> getUserList() { return userMapper.getUserList(); } } ``` 6. 编写Mapper接口和Mapper.xml文件 ``` public interface UserMapper { List<User> getUserList(); } <mapper namespace="com.example.dao.UserMapper"> <select id="getUserList" resultType="com.example.model.User"> select * from user </select> </mapper> ``` 以上是整合SpringMVCMyBatis的基本步骤和配置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr-X~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值