SpringBootはデータベース接続プールを統合しますHikariCPDruid Alibaba Druid

HikariCP(Hikali)データベース接続プール部分(デフォルトの接続プール)

前書き:

  • HiKariCP(xi ka li)
  • 1. HiKariCPは、データベース接続プールの新星で​​あり、最高のパフォーマンスと最速の速度を備えていると主張しており、他の接続プールから完全にPKすることができます。
  • 2.光は日本語から来て、非常に速いことを意味する「光」(裸の光ではなく太陽の光)を意味します
  • 3.この製品のスローガンは「速くてシンプルで信頼できる」です
  • 4.間もなく、SpringBoot2.0はデフォルトの接続プール構成としてHikariCPを採用します。

データベース接続プールの比較表

このPSCacheはPreparedStatement CacheSQLキャッシュです

特徴 dbcp ドルイド c3p0 tomcat-jdbc HikariCP
PSCacheをサポートするかどうか はい はい はい 番号 番号
モニター jmx jmx / log / http jmx、log jmx jmx
スケーラビリティ 弱い すごい 弱い 弱い 弱い
SQLの傍受と分析 番号 待機する 番号 番号 番号
コード シンプル 繁雑 シンプル シンプル
更新時間 2015.8.6 2015.10.10 2015.12.09 2015.12.3
特徴 共通プールに依存 Aliオープンソース、フル機能 長い歴史、複雑なコードロジック、および保守が難しい boneCPに由来する優れた最適化、シンプルな機能
接続プール管理 LinkedBlockingDeque アレイ FairBlockingQue

spring-boot-starter-jdbcをインポートし、springbootに依存して、デフォルトでデータベース接続プールとしてHikariCPを使用するだけです。

application.yml構成ファイル

HikarICP構成

datasource:
  type: com.zaxxer.hikari.HikariDataSource  #数据源的实现类
  driverClassName: com.mysql.cj.jdbc.Driver    #mysql驱动 8.0版本以上需要使用 com.mysql.cj.jdbc.Driver
  url: jdbc:mysql://你的数据库地址:3306/ssm?useUnicode=true&characterEncoding=utf-8&useSSL=false
  username: root    # 用户名
  password: root    # 密码
  # Hikari 连接池配置
  # 最小空闲连接数量
  hikari:
    minimum-idle: 5
    # 空闲连接存活最大时间,默认600000(10分钟)
    idle-timeout: 180000
    # 连接池最大连接数,默认是10
    maximum-pool-size: 10
    # 此属性控制从池返回的连接的默认自动提交行为,默认值:true
    auto-commit: true
    # 连接池名称
    pool-name: MyHikariCP
    # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
    max-lifetime: 1800000
    # 数据库连接超时时间,默认30秒,即30000
    connection-timeout: 30000
    connection-test-query: SELECT 1

アリババドルイド接続プール

  • プロファイルが
    Druidある阿里巴巴と組み合わせたオープンソースのプラットフォームを達成するために、データベース接続プール、C3P0DBCPPROXOOL及び他のDB添加しながら、プールの利点ログの監視
  • それは言うことができるHikariDriud最高のデータ・ソースに現在のすべてのJavaのWeb
  • HikariCPヘビースピードDruidヘビーセキュリティと監視

Druidデータソースを使用する

  • 最初のインポートの依存関係
<!--Druid数据源-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.12</version>
</dependency>

プロジェクトの依存関係を表示する

画像

  • application.ymlに移動して、データソースを切り替えます
  • Spring Boot 2.0以降では、デフォルトでcom.zaxxer.hikari.HikariDataSourceデータソースを使用すると言われていますが、データソースはspring.datasource.typeで指定できます。

画像

  • 置き換え後、テストディレクトリに移動して、以下の現在のデータソースがDruidデータソースに切り替えられているかどうかをテストできます。

画像

  • 正常に切り替えました!切り替えが成功したので、データソース接続の初期化サイズ、接続の最大数、待機時間、接続の最小数、およびその他の設定を設定できます。
  • テストするいくつかのパラメーターを構成できます。
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://你的数据库地址:3306/smbms?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
    username: root
    password: root
    # 更换数据源为Druid
    type: com.alibaba.druid.pool.DruidDataSource

    #Spring Boot 默认是不注入这些属性值的,需要自己绑定
    #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,stat:监控统计、log4j:日志记录、wall:防御sql注入
    #如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority
    #则导入 log4j 依赖即可,Maven 地址: https://mvnrepository.com/artifact/log4j/log4j
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
  • 上記の構成ではlog4jを使用しているため、log4jの依存関係を導入する必要があります。そうしないと、En ...
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
  • ここで、の自動生成をcom.alibaba.druid.pool.DruidDataSource使用Spring Bootするのではなく、グローバルにバインドする構成パラメーターファイルを所有し、コンテナーに追加する必要がありDruidDataSourceます。コンテナーとバインディングプロパティにコンポーネントを追加する必要があります。
  • ドルイドを作成する 配置类 config.DruidConfig
  • 完全なコード
package com.yufire.springboot.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class DruidConfig {
    
    

    /*
       将自定义的 Druid数据源添加到容器中,不再让 Spring Boot 自动创建
       绑定全局配置文件中的 druid 数据源属性到 com.alibaba.druid.pool.DruidDataSource从而让它们生效
       @ConfigurationProperties(prefix = "spring.datasource"):作用就是将 全局配置文件中
       前缀为 spring.datasource的属性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名参数中
     */
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druidDataSource() {
    
    
        return new DruidDataSource();
    }

}
  • OK構成が完了しました。テストしてみましょう
public class SpringbootDemoDataApplicationTests {
    
    

    //注入数据源
    @Autowired
    DataSource dataSource;

    @Test
    public void contextLoads() throws SQLException {
    
    
        //看一下默认数据源
        System.out.println(dataSource.getClass());
        //获得连接
        Connection connection =   dataSource.getConnection();
        System.out.println(connection);

        DruidDataSource druidDataSource = (DruidDataSource) dataSource;
        System.out.println("druidDataSource 数据源最大连接数:" + druidDataSource.getMaxActive());
        System.out.println("druidDataSource 数据源初始化连接数:" + druidDataSource.getInitialSize());

        //关闭连接
        connection.close();
    }

}

画像

Druidデータソースモニタリングの構成ハイライト

  • Druidデータソースには監視機能があり、ルーターがインストールされている場合と同様に、ユーザーが表示できるWebインターフェイスを提供します。他のソースもデフォルトのWebページを提供します。
  • したがって、最初のステップは、ログインアカウント、パスワードなどのDruidのバックエンド管理ページを設定することです。バックエンド管理を構成します。

作成したDruid構成に次のコードを追加します

 /**
     * 配置 Druid 监控管理后台的Servlet;
     * 内置 Servler 容器时没有web.xml文件,所以使用 Spring Boot 的注册 Servlet 方式
     * @return
     */
    @Bean
    public ServletRegistrationBean statViewServlet() {
    
    
        //配置Durid管理界面访问地址
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");

        Map<String, String> initParams = new HashMap<>();
        //后台管理界面的登录账号  initParams初始化配置需要的key都是死配置并且不能写错
        initParams.put("loginUsername", "admin");
        //后台管理界面的登录密码
        initParams.put("loginPassword", "123456");

        //后台允许谁可以访问
        //initParams.put("allow", "localhost"):表示只有本机可以访问
        //initParams.put("allow", ""):为空或者为null时,表示允许所有访问
        initParams.put("allow", "");
        //deny:Druid 后台拒绝谁访问
        //initParams.put("yufire", "192.168.1.20");表示禁止此ip访问

        //设置初始化参数
        bean.setInitParameters(initParams);
        return bean;
        //这些参数可以在 com.alibaba.druid.support.http.StatViewServlet 的父类 com.alibaba.druid.support.http.ResourceServlet 中找到
    }


    /**
     * 配置 Druid 监控 之  web 监控的 filter
     * WebStatFilter:用于配置Web和Druid数据源之间的管理关联监控统计
     * @return
     */
    @Bean
    public FilterRegistrationBean webStatFilter() {
    
    
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());

        //exclusions:设置哪些请求进行过滤排除掉,从而不进行统计
        Map<String, String> initParams = new HashMap<>();
        initParams.put("exclusions", "*.js,*.css,/druid/*");
        bean.setInitParameters(initParams);

        //"/*" 表示过滤所有请求
        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;
    }

  • 構成後、次のサイトにアクセスすることを選択できます:http:// localhost:8080 / druid / login.html
ログインに成功すると、次のページが表示されます

ここに画像の説明を挿入します

統合後、永続層フレームワーク(MyBatis-Plus tk.mybatisなど)を使用して楽しくプレイできます~~~

この記事の転載は許可されていません。編集は簡単ではありません。転送元を指定してください。著者qq:2867874665

おすすめ

転載: blog.csdn.net/weixin_43420255/article/details/105914337