编程知识 cdmana.com

L'apprentissage le plus détaillé de springboot sur le Web - day07

IntégrationDruid

À propos de l'auteur

Page d'accueil du blog:Page d'accueil de l'auteur

Introduction:JAVADomaine créateur de haute qualité、Un étudiant de troisième année、Participer à diverses compétitions provinciales pendant l'école、National race,Une série d'honneurs.

Concentre - toi sur moi.:Suivez mon matériel d'apprentissage、Tous les téléchargements de documents sont disponibles,Mise à jour quotidienne des articles,Inspirez - vous en tant queJAVASenior Program singe.

DruidIntroduction

  • JavaUne grande partie du programme gère la base de données,Lors de l'exploitation de la base de données pour améliorer les performances,J'ai dû utiliser le pool de connexion à la base de données.

  • Druid Est la mise en œuvre d'un pool de connexion de base de données sur la plate - forme open source d'Alibaba,Combiné C3P0、DBCP Attendez. DB Avantages du pool,La surveillance des journaux a également été ajoutée..

  • Druid Ça peut être surveillé. DB Connexion au pool et SQL Mise en œuvre de la Convention,Conçu pour la surveillance DB Pool de connexion.

  • DruidDéjà déployé sur Alibaba plus que600Demandes,Après plus d'un an de déploiement à grande échelle de l'environnement de production.

  • Spring Boot 2.0 Utilisation par défaut ci - dessus Hikari Source des données,Pour ainsi dire Hikari Avec Driud Tout est courant. Java Web Les meilleures sources de données,Nous allons mettre l'accent sur Spring Boot Comment intégrer Druid Source des données,Comment réaliser la surveillance de la base de données.

  • GithubAdresse:https://github.com/alibaba/druid/

com.alibaba.druid.pool.DruidDataSource Les paramètres de configuration de base sont les suivants::

Configuration Par défaut Description
name Le sens de la configuration de cette propriété est,S'il y a plus d'une source de données,On peut le distinguer par son nom.. Si elle n'est pas configurée,Un nom sera généré,Le format est:“DataSource-” + System.identityHashCode(this)
jdbcUrl Connecté à la base de donnéesurl,Différentes bases de données.Par exemple: mysql : jdbc:mysql://10.20.153.104:3306/druid2 oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
username Nom d'utilisateur pour la connexion à la base de données
password Mot de passe pour se connecter à la base de données.Si vous ne voulez pas que le mot de passe soit écrit directement dans le fichier de configuration,Peut être utiliséConfigFilter.Regardez ici.:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter
driverClassName SelonurlReconnaissance automatique Celui - ci ne correspond pas.,Si vous ne configurez pasdruidSera basé sururlReconnaissance automatiquedbType,Puis sélectionnez ledriverClassName(Configuration recommandée)
initialSize 0 Nombre de connexions physiques établies lors de l'initialisation.L'initialisation se produit lors de l'affichage de l'appelinitMéthodes,Ou pour la première foisgetConnectionHeure
maxActive 8 Nombre maximum de pools de connexion
maxIdle 8 N'est plus utilisé,Ça n'a aucun effet.
minIdle Nombre minimum de pools de connexion
maxWait Temps d'attente maximal pour la connexion,Unit é milliseconde.ConfigurémaxWaitAprès,Activer le verrouillage équitable par défaut,L'efficacité de la concurrence diminuera,Peut être configuré si nécessaireuseUnfairLockLa propriété esttrueUtilisation de serrures déloyales.
poolPreparedStatements false Cache ou nonpreparedStatement,C'est - à - direPSCache.PSCacheAmélioration significative des performances des bases de données supportant les curseurs,Par exemple,oracle.InmysqlIl est recommandé de fermer.
maxOpenPreparedStatements -1 Pour activerPSCache,Doit être configuré plus grand que0,Quand il est plus grand que0Heure,poolPreparedStatementsLe déclenchement automatique est modifié entrue.InDruidMoyenne,Il n'y aura pasOracleEn bas.PSCacheProblème d'utilisation excessive de la mémoire,Vous pouvez configurer cette valeur plus grande,Par exemple,100
validationQuery Pour vérifier si la connexion est validesql,L'exigence est un énoncé de requête.SivalidationQueryPournull,testOnBorrow、testOnReturn、testWhileIdleÇa ne marchera pas..
validationQueryTimeout Unité:Secondes,Temps d'arrêt pour vérifier si la connexion est valide.Appel sous - jacentjdbc
StatementObjetvoid setQueryTimeout(int seconds)Méthodes
testOnBorrow true Lors de la demande de connexionvalidationQueryVérifier si la connexion est valide,Cette configuration réduit les performances
testOnReturn false Exécution lors du retour de la connexionvalidationQueryVérifier si la connexion est valide,Cette configuration réduit les performances
testWhileIdle false La configuration recommandée esttrue,Sans affecter les performances,Et assurer la sécurité.Détection lors de la demande de connexion,Si le temps libre est supérieur àtimeBetweenEvictionRunsMillis,Mise en œuvrevalidationQueryVérifier si la connexion est valide
timeBetweenEvictionRunsMillis 1Minutes
( 1.0.14 )
Il y a deux significations: 1) DestroyLe thread détectera l'intervalle entre les connexions 2) testWhileIdleBase de jugement de,Pour plus de détailstestWhileIdleDescription de la propriété
numTestsPerEvictionRun Ne plus utiliser,UnDruidDataSourceUn seul supportEvictionRun
minEvictableIdleTimeMillis 30Minutes
( 1.0.14 )
Durée maximale pendant laquelle la connexion reste inactive sans être expulsée
connectionInitSqls Exécuté lorsque la connexion physique est initialiséesql
exceptionSorter SelondbTypeReconnaissance automatique Lorsque la base de données lance des exceptions irrécupérables,Jeter la connexion
filters Le type de propriété est une chaîne,Configuration des extensions par alias,Les plug - ins couramment utilisés sont:: Statistiques de surveillancefilter:statPour le journalfilter:log4jDéfensesqlInjectéfilter:wall
proxyFilters Le type estList<com.alibaba.druid.filter.Filter>,Si elle est configurée en même tempsfiltersEtproxyFilters,C'est une relation combinatoire,N'est pas une relation de remplacement

Configurer la source de données

  1. Ajouter Druid Dépendances des sources de données , Cette dépendance peut être obtenue à partir de Maven Site officiel de l'entrepôt Maven RespositoryAccès moyen

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.23</version>
    </dependency>
    

    image-20210928193129508

  2. Basculer la source de données;Je l'ai déjà dit. Spring Boot 2.0 Utilisation par défaut ci - dessus com.zaxxer.hikari.HikariDataSourceSource des données,Mais ça peut passer par spring.datasource.type Spécifier la source de données.

    spring:
      datasource:
        username: root
        password: 123456
        #Erreur de fuseau horaire ajouter la configuration du fuseau horaire
        url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf8
        driver-class-name: com.mysql.cj.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
    
  3. Après le changement de source de données , Injecter dans la classe d'essai DataSource, Et l'obtenir , Sortie pour voir si la commutation est réussie ;

    image-20210928193435048

  4. Commutation réussie! Maintenant que la commutation est réussie , Vous pouvez définir la taille d'initialisation de la connexion source de données 、Nombre maximum de connexions、Temps d'attente、Nombre minimum de connexions Paramètres égaux; Vous pouvez voir le code source

    spring:
      datasource:
        username: root
        password: 123456
        #Erreur de fuseau horaire ajouter la configuration du fuseau horaire
        url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf8
        driver-class-name: com.mysql.cj.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
    
        #Spring Boot Par défaut, ces valeurs de propriété ne sont pas injectées,Besoin de se lier
        #druid Configuration propriétaire de la source de données
        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
    
        #Configurer l'interception des statistiques de surveillancefilters,stat:Statistiques de surveillance、log4j:Logging、wall:DéfensesqlInjection
        #Si vous permettez de signaler une erreur java.lang.ClassNotFoundException: org.apache.log4j.Priority
        #Importer log4j La dépendance suffit,Maven Adresse:https://mvnrepository.com/artifact/log4j/log4j
        filters: stat,wall,log4j
        maxPoolPreparedStatementPerConnectionSize: 20
        useGlobalDataSourceStat: true
        connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
    
  5. ImporterLog4j Dépendance

    <!-- log4j-->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    
  6. Le programmeur lui - même est maintenant nécessaire pour DruidDataSource Lier les paramètres du profil global , Ajouter au conteneur ,Et ne plus utiliser Spring Boot La génération automatique de ;Il nous faut Ajouter vous - même DruidDataSource Composants dans le conteneur , Et lier les propriétés ;

    package com.sxau.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 {
          
        /* Sera personnalisé DruidSource de données ajoutée au conteneur,Plus maintenant. Spring Boot Création automatique Lier le druid Propriétés de la source de données à com.alibaba.druid.pool.DruidDataSourcePour qu'ils entrent en vigueur @ConfigurationProperties(prefix = "spring.datasource"):Le but est de Dans le profil global Préfixe spring.datasourceValeur de l'attribut injectée dans com.alibaba.druid.pool.DruidDataSource Dans le paramètre du même nom pour */
        @ConfigurationProperties(prefix = "spring.datasource")
        @Bean
        public DataSource druidDataSource() {
          
            return new DruidDataSource();
        }
    
        //Configuration Druid Surveillance de la gestion de l'arrière - planServlet;
    //Intégré Servlet Pas de conteneurweb.xmlDocumentation,Alors utilisez Spring Boot Inscription Servlet Comment
        @Bean
        public ServletRegistrationBean statViewServlet() {
          
            ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
    
            // Ces paramètres peuvent être trouvés dans com.alibaba.druid.support.http.StatViewServlet
            // Parent de com.alibaba.druid.support.http.ResourceServlet Trouvé dans
            Map<String, String> initParams = new HashMap<>();
            initParams.put("loginUsername", "admin"); //Compte de connexion dans l'interface de gestion de fond
            initParams.put("loginPassword", "123456"); //Mot de passe de connexion pour l'interface de gestion de fond
    
            //Qui est autorisé à accéder en arrière - plan
            //initParams.put("allow", "localhost"):Indique que seul l'ordinateur local est accessible
            //initParams.put("allow", ""):Vide ounullHeure,Indique que tous les accès sont autorisés
            initParams.put("allow", "");
            //deny:Druid Qui a refusé l'accès en arrière - plan
            //initParams.put("kuangshen", "192.168.1.20");Indique que ceci est interditipAccès à
    
            //Définir les paramètres d'initialisation
            bean.setInitParameters(initParams);
            return bean;
        }
    
        //Configuration Druid Surveillance De web Surveillance filter
    //WebStatFilter:Pour la configurationWebEtDruidStatistiques de surveillance des associations de gestion entre les sources de données
        @Bean
        public FilterRegistrationBean webStatFilter() {
          
            FilterRegistrationBean bean = new FilterRegistrationBean();
            bean.setFilter(new WebStatFilter());
    
            //exclusions:Définir les demandes à filtrer exclure,Pour ne pas faire de statistiques
            Map<String, String> initParams = new HashMap<>();
            initParams.put("exclusions", "*.js,*.css,/druid/*,/jdbc/*");
            bean.setInitParameters(initParams);
    
            //"/*" Indique que toutes les demandes sont filtrées
            bean.setUrlPatterns(Arrays.asList("/*"));
            return bean;
        }
    }
    
    
  7. Allez tester dans la classe ;Pour voir si ça marche!

    package com.sxau;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.SQLException;
    
    @SpringBootTest
    class Springboot05JdbcApplicationTests {
          
        //DISource des données d’injection
        @Autowired
        DataSource dataSource;
        @Test
        void contextLoads() throws SQLException {
          
            //Voir la source de données par défaut:class com.zaxxer.hikari.HikariDataSource
            System.out.println(dataSource.getClass());
    
            //Obtenir une connexion à la base de données
            Connection connection = dataSource.getConnection();
            System.out.println(connection);
    
            DruidDataSource druidDataSource = (DruidDataSource) dataSource;
            System.out.println("druidDataSource Nombre maximum de connexions à la source de données:" + druidDataSource.getMaxActive());
            System.out.println("druidDataSource Nombre de connexions initialisées par la source de données:" + druidDataSource.getInitialSize());
            //Fermer la connexion
            connection.close();
        }
    
    }
    
  8. Résultats obtenus : Les paramètres de configuration visibles sont déjà en vigueur !

    image-20210928201827082

ConfigurationDruidSurveillance des sources de données

Druid La source de données a une fonction de surveillance,Et offre un web Interface conviviale, Installation similaire Routeur Heure, Il y a aussi une offre par défaut web Page.

Donc la première étape est de définir Druid Page d'administration de fond pour,Par exemple, Compte de connexion、Mot de passe Attendez.; Configurer la gestion de fond ;

package com.sxau.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 {
    
    /* Sera personnalisé DruidSource de données ajoutée au conteneur,Plus maintenant. Spring Boot Création automatique Lier le druid Propriétés de la source de données à com.alibaba.druid.pool.DruidDataSourcePour qu'ils entrent en vigueur @ConfigurationProperties(prefix = "spring.datasource"): Le but est d'intégrer  Préfixe spring.datasourceValeur de l'attribut injectée dans com.alibaba.druid.pool.DruidDataSource Dans le paramètre du même nom pour */
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druidDataSource() {
    
        return new DruidDataSource();
    }

    //Configuration Druid Surveillance de la gestion de l'arrière - planServlet;
    //Intégré Servlet Pas de conteneurweb.xmlDocumentation,Alors utilisez Spring Boot Inscription Servlet Comment
    @Bean
    public ServletRegistrationBean statViewServlet() {
    
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");

        // Ces paramètres peuvent être trouvés dans com.alibaba.druid.support.http.StatViewServlet
        // Parent de com.alibaba.druid.support.http.ResourceServlet Trouvé dans
        Map<String, String> initParams = new HashMap<>();
        initParams.put("loginUsername", "admin"); //Compte de connexion dans l'interface de gestion de fond
        initParams.put("loginPassword", "123456"); //Mot de passe de connexion pour l'interface de gestion de fond

        //Qui est autorisé à accéder en arrière - plan
        //initParams.put("allow", "localhost"):Indique que seul l'ordinateur local est accessible
        //initParams.put("allow", ""):Vide ounullHeure,Indique que tous les accès sont autorisés
        initParams.put("allow", "");
        //deny:Druid Qui a refusé l'accès en arrière - plan
        //initParams.put("kuangshen", "192.168.1.20");Indique que ceci est interditipAccès à

        //Définir les paramètres d'initialisation
        bean.setInitParameters(initParams);
        return bean;
    }
}

Après la configuration, Nous avons le choix d'accéder à :http://localhost:8080/druid/login.html

image-20210928201948310

Après l'entrée

image-20210928201957614

Configuration Druid web Surveillance filter Filtre

//Configuration Druid Surveillance De web Surveillance filter
//WebStatFilter:Pour la configurationWebEtDruidStatistiques de surveillance des associations de gestion entre les sources de données
@Bean
public FilterRegistrationBean webStatFilter() {
    
    FilterRegistrationBean bean = new FilterRegistrationBean();
    bean.setFilter(new WebStatFilter());

    //exclusions:Définir les demandes à filtrer exclure,Pour ne pas faire de statistiques
    Map<String, String> initParams = new HashMap<>();
    initParams.put("exclusions", "*.js,*.css,/druid/*,/jdbc/*");
    bean.setInitParameters(initParams);

    //"/*" Indique que toutes les demandes sont filtrées
    bean.setUrlPatterns(Arrays.asList("/*"));
    return bean;
}

版权声明
本文为[Directeur d'usine Java]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/10/20211013211944087c.html

Scroll to Top