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

Directeur d'usine Java 2021-10-14 05:02:05
apprentissage le taill springboot sur


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://javamana.com/2021/10/20211013211944087c.html

  1. What are the new features of Java 10?
  2. What are the new features of Java 9?
  3. Is the report too ugly? Try this open source project reportplus!
  4. Spring 2021 report released: who is the real brother?
  5. À bientôt, docker.
  6. Recommend a super easy to use markdown editor
  7. Java 17 new features overview
  8. New developer friendly features after Java 8
  9. Concise and efficient eclipse collections API
  10. Practice of deploying spring boot microservices on kubernetes
  11. Garbage collectors in the new JDK: Shenandoah, ZGC and improved G1
  12. À bientôt, docker.
  13. Oracle exécute le format syntaxique d'une procédure stockée ou d'un lot
  14. [Azure Cloud Service] Azure Cloud Service ajoute des champs personnalisés pour le rôle Web (hôte IIS) (ajoute le champ user agent dans l'en - tête de demande http au Journal de sortie IIS)
  15. The Linux kernel will be implemented with the latest zstd
  16. JetBrains publishes the raw data of the developer ecosystem survey in 2021
  17. Linux 5.16 will support KVM and disable amd PSF function
  18. Linux 5.16 brings DisplayPort 2.0 initial support for amdgpu driver
  19. Announcement of the election results of the technical advisory committee of the Linux foundation in 2021
  20. Java虚拟机|JVM【适合初学者入门】
  21. Spring Cloud 2021.0.0-M2 发布
  22. [Azure Cloud Service] Azure Cloud Service ajoute des champs personnalisés pour le rôle Web (hôte IIS) (ajoute le champ user agent dans l'en - tête de demande http au Journal de sortie IIS)
  23. Spring Cloud 2021.0.0-M2 發布
  24. Java虛擬機|JVM【適合初學者入門】
  25. Spring Cloud 2021.0.0-m2 Release
  26. Machine virtuelle Java | JVM [convient aux débutants]
  27. 10412 Xiaopeng cars announced sales results in September
  28. Apprendre le mécanisme des événements Java
  29. Java script RPC (07) - timeout timeout Processing from zero
  30. Introduction à la page Web de rabbitmq (3)
  31. MySQL read - Write Separation Cluster Construction and Integration with mycat
  32. Analyse du principe du conteneur du CIO printanier
  33. Java面向对象基础
  34. Java communique avec les capteurs industriels via socket et DTu, RTU
  35. Xiaopeng automobile delivered 10412 units in September, with a monthly sales volume of more than 10000 for the first time
  36. Java Object Oriented Foundation
  37. Introduction au développement Android PDF, un tour pour vous apprendre à comprendre netty
  38. Hadoop Foundation - 01 - concepts de base
  39. Hadoop Foundation - 02 - Basic Structure
  40. Hadoop Foundation - 03 - hdfs (Hadoop Distributed File System) Basic Concepts
  41. Hadoop Foundation - 04 - hdfs API Programming
  42. Hadoop Foundation - 05 - hdfs Project (word Frequency Statistics)
  43. Hadoop Foundation - 06 - hdfs Data Read and write
  44. The "monthly test" report card of the new car built under the lack of core: Xiaopeng and Weilai took the lead in "breaking 10000", and the ideal plummeted by 25%
  45. Introduction to making arch linux software package
  46. Hard core observation 407 HTTPS everywhere browser extension is about to retire
  47. How to use busybox on Linux
  48. In 2021, the talent incentive plan of Linux foundation open source software School Park was officially launched
  49. It's not windows or Linux. Shrink is the "God operating system"
  50. Install anydesk on Ubuntu Linux
  51. 2021, can we recommend using Linux to play games?
  52. not exist:org.springframework.kafka.listener.AbstractMessageListenerContaingetContainerProperties()
  53. Are you sure HTTPS is asymmetric encryption for content encryption? See the answers and reasons
  54. MySQL online slow log query
  55. Java JDK server installation
  56. 手把手教你使用Java开发在线生成pdf文档
  57. Questions d'entrevue dans la base de données MySQL (dernière version 2021)
  58. Java零基础小白入门必做题汇总(建议收藏)第一篇
  59. Day15 Java Foundation
  60. Day16 Java Foundation