欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot集成Druid连接池

程序员文章站 2022-10-26 09:22:03
连接池的作用是为了提高性能,将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对Server端进行访问。 这样省略(复用)了创建连接和销毁连接的过程(TCP连接建立时的三次握手和销毁时的四次握手),从而在性能上得到了提高。 ......

关于数据库连接池

  • 早期数据库访问(也没多少人上网)

    ​  ①装载数据库驱动程序;

      ②通过jdbc建立数据库连接;

      ③访问数据库,执行sql语句;

      ④断开数据库连接。


    对于并发量大的网站,会导致以下问题:

    • 每一次web请求都要建立一次数据库连接,在同样的步骤下重复占用系统资源

    • 不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去

      如连接过多,也可能导致内存泄漏,服务器崩溃。

  • 数据库连接池

    连接池的作用是为了提高性能,将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对server端进行访问。

    这样省略(复用)了创建连接和销毁连接的过程(tcp连接建立时的三次握手和销毁时的四次握手),从而在性能上得到了提高。

  • 嚣张的druid(github的wiki上自称是java语言最好的数据库连接池)

    SpringBoot集成Druid连接池

集成druid

在上次thymeleaf基础上进行集成

https://www.cnblogs.com/noneplus/p/11528129.html

  • 引入pom
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
    <groupid>com.alibaba</groupid>
    <artifactid>druid</artifactid>
    <version>1.1.20</version>
</dependency>
  • yaml

    spring:
      datasource:
        #   数据源基本配置
        username: noneplus
        password: noneplus564925080!
        driver-class-name: com.mysql.cj.jdbc.driver
        url: jdbc:mysql://47.103.6.247:3306/user?servertimezone=utc
        type: com.alibaba.druid.pool.druiddatasource
        #   druid数据源配置
        initialsize: 5
        minidle: 5
        maxactive: 20
        maxwait: 60000
        timebetweenevictionrunsmillis: 60000
        minevictableidletimemillis: 300000
        validationquery: select 1 from dual
        testwhileidle: true
        testonborrow: false
        testonreturn: false
        poolpreparedstatements: true
        #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
        filters: stat,wall,log4j
        maxpoolpreparedstatementperconnectionsize: 20
        useglobaldatasourcestat: true
        connectionproperties: druid.stat.mergesql=true;druid.stat.slowsqlmillis=500
      thymeleaf:
        cache: false
    pagehelper:
      helperdialect: mysql
      reasonable: true
      supportmethodsarguments: true
      pagesizezero: false #pagesize=0
    
  • druidconfig

    package zkrun.top.web.config;
    
    
    import com.alibaba.druid.pool.druiddatasource;
    import com.alibaba.druid.support.http.statviewservlet;
    import com.alibaba.druid.support.http.webstatfilter;
    import org.springframework.boot.context.properties.configurationproperties;
    import org.springframework.boot.web.servlet.filterregistrationbean;
    import org.springframework.boot.web.servlet.servletregistrationbean;
    import org.springframework.context.annotation.bean;
    import org.springframework.context.annotation.configuration;
    
    import javax.sql.datasource;
    import java.util.arrays;
    import java.util.hashmap;
    import java.util.map;
    
    @configuration
    public class druidconfig {
    
        //加载application.yaml中的druid配置
        @configurationproperties(prefix = "spring.datasource")
        @bean
        public datasource druid(){
            return  new druiddatasource();
        }
    
        //配置druid的监控
        //1、配置一个管理后台的servlet
        @bean
        public servletregistrationbean statviewservlet(){
            servletregistrationbean bean = new servletregistrationbean(new statviewservlet(), "/druid/*");
            map<string,string> initparams = new hashmap<>();
    
            initparams.put("loginusername","hq");
            initparams.put("loginpassword","564925080");
            initparams.put("allow","");//默认就是允许所有访问
            initparams.put("deny","192.168.15.21");
    
            bean.setinitparameters(initparams);
            return bean;
        }
    
    
        //2、配置一个web监控的filter
        @bean
        public filterregistrationbean webstatfilter(){
            filterregistrationbean bean = new filterregistrationbean();
            bean.setfilter(new webstatfilter());
    
            map<string,string> initparams = new hashmap<>();
            initparams.put("exclusions","*.js,*.css,/druid/*");
    
            bean.setinitparameters(initparams);
    
            bean.seturlpatterns(arrays.aslist("/*"));
    
            return  bean;
        }
    }
  • log4j

     <dependency>
                <groupid>log4j</groupid>
                <artifactid>log4j</artifactid>
                <version>1.2.17</version>
            </dependency>

测试

访问:

http://localhost:8080/druid/

SpringBoot集成Druid连接池

实时监控:

SpringBoot集成Druid连接池

SpringBoot集成Druid连接池

数据源配置文件密码加密显示

  • 找到jar包,在终端打开:

SpringBoot集成Druid连接池

  • 生成密码
java -cp druid-1.0.16.jar com.alibaba.druid.filter.config.configtools yourpassword

其中druid-1.0.16.jar换成正在使用对应的版本,yourpassword改成数据库连接的密码。

生成privatekey和publickey以及password

privatekey:miibvaibadanbgkqhkig9w0baqefaascat4wgge6ageaakeagix0+n2diiixwasa642qri8hto2xg1litfedfwgeg9g1wvlarf69gq+wdbpphy63ddbry8d3i/vnzmag0bgxwwidaqabakaqfidiuwlsn4hjwcbaovskk2regp6hjq
96p8f79vxgm/fneqyzlgiiqvviutsowssqses+c/cdoxyegfddiespaieauq1lcfubph7mwzwlbii0gm4+/1tnqed+w9lm3qgjyk0ciqcyepaxbry8vk8puzmokr74kffbfg5wqbajunyym1pmtwigzttpfx8metxladzm6exqvzi0x+j4qq1ynan
6p0r+pckcifpz8ei5c3kre6oh5bt0nechxqwnnjgvc1wl90xtww1vaieankdxli45e1e8jgpcq4tg90pmdlklrcxunbihurohyew=
publickey:mfwwdqyjkozihvcnaqebbqadswawsajbaiil9pp9nyiisvgegounqqypiu6nsynsylx3gxcbhiprtcl5wqxevykvsawat4wotww268vhdyp7zwtghtgxscmcaweaaq==
password:memmpyhaoufvuar37bmbumgw76wvslad7pnflrbup5h4q6szvwmdsyacnzval2hy2man1rc6scjmywrse1xpkw==
  • yaml配置

修改password,添加公钥。

spring:
  datasource:
    #   数据源基本配置
    username: noneplus
    password: memmpyhaoufvuar37bmbumgw76wvslad7pnflrbup5h4q6szvwmdsyacnzval2hy2man1rc6scjmywrse1xpkw==   # 1.配置生成的password
    driver-class-name: com.mysql.cj.jdbc.driver
    url: jdbc:mysql://47.103.6.247:3306/user?servertimezone=utc
    type: com.alibaba.druid.pool.druiddatasource
    #   druid数据源配置
    initialsize: 5
    minidle: 5
    maxactive: 20
    maxwait: 60000
    timebetweenevictionrunsmillis: 60000
    minevictableidletimemillis: 300000
    validationquery: select 1 from dual
    testwhileidle: true
    testonborrow: false
    testonreturn: false
    poolpreparedstatements: true
    #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat,wall,log4j,config  # 3.添加config
    maxpoolpreparedstatementperconnectionsize: 20
    useglobaldatasourcestat: true
    # 2.开启加密,配置公钥
    connectionproperties: druid.stat.mergesql=true;druid.stat.slowsqlmillis=500;config.decrypt=true;config.decrypt.key=mfwwdqyjkozihvcnaqebbqadswawsajbaiil9pp9nyiisvgegounqqypiu6nsynsylx3gxcbhiprtcl5wqxevykvsawat4wotww268vhdyp7zwtghtgxscmcaweaaq==
  thymeleaf:
    cache: false
pagehelper:
  helperdialect: mysql
  reasonable: true
  supportmethodsarguments: true
  pagesizezero: false #pagesize=0

代码参考

https://github.com/hcj-shadow/springbootplus