
Le chemin de la croissance des programmeurs
Internet/Programmeur/Technique/Partage des données
La lecture de cet article nécessite probablement 10 Minutes.
De:blog.csdn.net/weixin_44730681/article/details/107944048
1 Concepts de base
Druid - Oui.JavaLe meilleur pool de connexions de base de données dans la langue.
Bien que HikariCP Un peu plus vite,Mais, DruidCapable de fournir une surveillance et une extension puissantes ,C'est aussi le projet Open source d'Alibaba.
DruidC'est le pool de connexion à la base de données développé par Alibaba sous le nom de surveillance,En fonction、Performance、Extensibilité,Plus que tout autre pool de connexion à la base de données,Y compris:DBCP、C3P0、BoneCP、Proxool、JBoss DataSourceAttends, attends,Tue tout..
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.
Spring Boot Source de données par défaut HikariDataSource Avec JdbcTemplateDéjà décrit dans Spring Boot 2.x Utilisation par défaut Hikari Source des données ,Pour ainsi dire Hikari Avec Driud Tout est courant. Java Web Les meilleures sources de données.
EtDruidDéjà déployé sur Alibaba plus que600Demandes,Après plusieurs années de déploiement à grande échelle de l'environnement de production!
- stat:DruidIntégré pour fournir un
StatFilter
,Pour les informations statistiques de surveillance. wall:DruidDéfenseSQLInjecter l'attaque
WallFilter
C'est parDruidDeSQL ParserAnalyse.DruidFourniSQL ParserÇa pourrait être dansJDBCInterception des couchesSQLTraiter en conséquence,Par exemple, sous - entrepôt et sous - table、Audit, etc..log4j2:C'est Fonction de journalisation,Tu peux mettresqlLes déclarations sont imprimées àlog4j2 Pour résoudre les problèmes.
2 Ajouter une dépendance
pom.xml
<!-- AlibabadruidSource des données --><dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.23</version></dependency><!-- mysql8 Drive--><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope></dependency><!--Utiliser log4j2 Journal de bord--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId></dependency><!--mybatis,Introduit SpringBootDe JDBC Module,Alors...,La valeur par défaut est d'utiliser hikari Comme source de données--><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> <exclusions> <!-- Exclure par défaut HikariCP Source des données --> <exclusion> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> </exclusion> </exclusions></dependency>
3 Configurer les propriétés associées
- ConfigurationDruidSource des données(Pool de connexion) :Comme avant c3p0、dbcp La source de données peut définir la taille d'initialisation de la connexion source de données、Nombre maximum de connexions、Temps d'attente、Nombre minimum de connexions Attends.,Druid L'isomorphisme des sources de données peut être défini;
Configuration Druid web Surveillance filter(WebStatFilter) :Ce filtre fonctionne comme une statistique web Appliquer toutes les informations de la base de données dans la demande,Par exemple, Envoyé sql Déclarations,sql Temps d'exécution、Nombre de demandes、Demande url Adresse、Etseesion Surveillance、Nombre d'accès à la table de base de données Attendez un peu!.
Configuration Druid Gestion des coulisses Servlet(StatViewServlet) :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;Paramètres requis Druid Propriétés de la page d'administration de fond pour,Par exemple, Compte de connexion、Mot de passe Attendez.; Attention!:
Druid Spring Boot Starter Le nom de la propriété de configuration suit exactement Druid,Peut passer Spring Boot Profil pour configurerDruidPool de connexion à la base de données et surveillance,Utilisez la valeur par défaut si elle n'est pas configurée.application.yml
########## Configurer la source de données (Druid)##########spring: datasource: ########## JDBC Configuration de base ########## username: xxx password: xxx driver-class-name: com.mysql.cj.jdbc.Driver # mysql8 Connexion à l'entraînement url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=Asia/Shanghai platform: mysql # Type de base de données type: com.alibaba.druid.pool.DruidDataSource # Spécifier le type de source de données ########## Pool de connexion Configuration ########## druid: # Configurer la taille d'initialisation、Minimum、Max. initial-size: 5 minIdle: 10 max-active: 20 # Configurer le temps d'attente pour obtenir la connexion(Unité:MS) max-wait: 60000 # Combien de fois configurez - vous l'intervalle de détection,Détecter les connexions inactives qui doivent être fermées,En millisecondes time-between-eviction-runs-millis: 2000 # Configurer une connexion pour une durée de vie minimale dans le pool,En millisecondes min-evictable-idle-time-millis: 600000 max-evictable-idle-time-millis: 900000 # Pour vérifier si la connexion est disponibleSQLDéclarations,Par défaut, chaque base de données est différente,C'estmysql validationQuery: select 1 # L'application demande une connexion au pool de connexion,EttestOnBorrowPourfalseHeure,Le pool de connexion déterminera si la connexion est inactive,Si oui,Vérifiez que cette connexion est disponible testWhileIdle: true # Si ouitrue,Par défautfalse,Lorsqu'une application demande une connexion au pool de connexion,Le pool de connexion déterminera si cette connexion est disponible testOnBorrow: false # Si ouitrue(Par défautfalse),Quand l'application a fini d'utiliser la connexion,Lorsque le pool de connexion récupère une connexion, il détermine si la connexion est encore disponible testOnReturn: false # Cache ou nonpreparedStatement,C'est - à - direPSCache.PSCacheAmélioration significative des performances des bases de données supportant les curseurs,Par exemple,oracle poolPreparedStatements: true # 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 maxOpenPreparedStatements: 20 # Dans le pool de connexionminIdleConnexions en nombre,Temps libre supérieur àminEvictableIdleTimeMillis,Alors il va exécuterkeepAliveFonctionnement keepAlive: true # Spring Surveillance,Utilisationaop Temps d'exécution de l'interface spécifiée,jdbcCompter pour enregistrer aop-patterns: "com.springboot.template.dao.*" ########### Activer le filtre intégré(Le premier statIl faut,Sinon, il n'y a pas de surveillanceSQL)########## filters: stat,wall,log4j2 # Configurer vous - même pour surveiller l'interception statistiquefilter filter: # OuvertdruiddatasourceSurveillance de l'état stat: enabled: true db-type: mysql # Ouverture lentesqlSurveillance,Plus que2s Je pense que c'est lentsql,Enregistré dans le journal log-slow-sql: true slow-sql-millis: 2000 # Surveillance des journaux,Utiliserslf4j Effectuer la sortie du Journal slf4j: enabled: true statement-log-error-enabled: true statement-create-after-log-enabled: false statement-close-after-log-enabled: false result-set-open-after-log-enabled: false result-set-close-after-log-enabled: false ########## ConfigurationWebStatFilter,Pour la collectewebDonnées associées à la surveillance ########## web-stat-filter: enabled: true # Démarrage StatFilter url-pattern: /* # Filtrer touturl exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" # Exclure certainsurl session-stat-enable: true # OuvertsessionFonctions statistiques session-stat-max-count: 1000 # sessionNombre maximum de,Par défaut100 ########## ConfigurationStatViewServlet(Page de surveillance),Pour présentationDruidStatistiques pour ########## stat-view-servlet: enabled: true # ActiverStatViewServlet url-pattern: /druid/* # Accès à la page de surveillance intégrée,La page d'accueil de la page de surveillance intégrée est/druid/index.html reset-enable: false # Il n'est pas permis de vider les statistiques,Recalculer login-username: root # Configurer le mot de passe d'accès à la page de surveillance login-password: 123 allow: 127.0.0.1 # Adresses auxquelles l'accès est autorisé,SiallowNon configuré ou vide,Autoriser tous les accès deny: # Adresse à laquelle l'accès est refusé,denyPriorité surallow,Si dansdenyDans la Liste,Même siallowDans la Liste,Il sera également rejeté
Les paramètres du profil ci - dessus peuvent être trouvés à com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties
Et org.springframework.boot.autoconfigure.jdbc.DataSourceProperties
Trouvé dans;
3.1 Comment configurer Filter
Peut passer spring.datasource.druid.filters=stat,wall,log4j ...
Pour activer l'intégration correspondanteFilter,Mais çaFilterToutes les configurations par défaut.Si la configuration par défaut ne répond pas aux exigences,On peut renoncer à ça,Configurer par profilFilter,Voici quelques exemples:.
# ConfigurationStatFilter spring.datasource.druid.filter.stat.enabled=truespring.datasource.druid.filter.stat.db-type=h2spring.datasource.druid.filter.stat.log-slow-sql=truespring.datasource.druid.filter.stat.slow-sql-millis=2000# ConfigurationWallFilter spring.datasource.druid.filter.wall.enabled=truespring.datasource.druid.filter.wall.db-type=h2spring.datasource.druid.filter.wall.config.delete-allow=falsespring.datasource.druid.filter.wall.config.drop-table-allow=false
Pour l'instant, voici Filter Support de configuration fourni,Selon(spring.datasource.druid.filter.*)Configurer.
- StatFilter
WallFilter
ConfigFilter
EncodingConvertFilter
Slf4jLogFilter
Log4jFilter
Log4j2Filter
CommonsLogFilter Je ne veux pas utiliser le Filters,Pour personnaliser Filter La configuration doit correspondre à Filter De enabled Set to true ,Druid Spring Boot Starter Désactivé par défaut StatFilter,Vous pouvez le faire enabled Set to true Pour l'activer.
3.2 Page de surveillance
(1)Après le lancement du projet,Accès à /druid/login.html
Viens. Page de connexion ,Saisissez le nom d'utilisateur et le mot de passe pour vous connecter

(2) Page source des données Est actuelDataSourceInformations de base sur la configuration,Configuré ci - dessusFilterOn peut le trouver à l'intérieur,Si elle n'est pas configuréeFilter(Certaines informations ne seront pas comptées,Par exemple“SQLSurveillance”,Ne peut pas obtenirJDBCQuestions connexesSQLInformations sur l'exécution)

(3) SQLPage de surveillance ,Tout compte.SQLExécution des déclarations

(4) URLPage de surveillance ,Tout compte.ControllerAccès et mise en œuvre de l'interface

(5)Spring Page de surveillance,Utilisationaop Temps d'exécution de l'interface spécifiée,jdbcCompter pour enregistrer

(6) SQLPage pare - feu
druidAccès à la liste en noir et blanc,Vous pouvez voir clairementsqlProtection.
(7) SessionPage de surveillance
Vous pouvez voir lesessionSituation actuelle,Temps de création、Dernière activité、Nombre de demandes、Paramètres détaillés tels que le temps de demande.
(8) JSONAPI Page
AdoptionapiAccès formelDruidInterface de surveillance pour,apiRetour de l'interfaceJsonDonnées formelles.
4 sqlSurveillance
Configuration Druid web Surveillance filter( WebStatFilter
)Ce filtre,Le rôle est de faire des statistiques web Appliquer toutes les informations de la base de données dans la demande,Par exemple, Envoyé sql Déclarations,sql Temps d'exécution、Nombre de demandes、Demande url Adresse、Etseesion Surveillance、Nombre d'accès à la table de base de données Attendez un peu!.
spring: datasource: druid: ########## ConfigurationWebStatFilter,Pour la collectewebDonnées associées à la surveillance ########## web-stat-filter: enabled: true # Démarrage StatFilter url-pattern: /* # Filtrer touturl exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" # Exclure certainsurl session-stat-enable: true # OuvertsessionFonctions statistiques session-stat-max-count: 1000 # sessionNombre maximum de,Par défaut100
5 DoucementsqlEnregistrement
Parfois...,Il y a desSQLMise en œuvre lente,Nous voulons utiliser le journal pour enregistrer,Peut être activéDruidLentSQLFonction d'enregistrement
spring: datasource: druid: filter: stat: enabled: true # OuvertDruidDataSourceSurveillance de l'état db-type: mysql # Type de base de données log-slow-sql: true # Ouverture lenteSQLFonction d'enregistrement slow-sql-millis: 2000 # Par défaut3000MS,Plus de2s,C'est lent.,Enregistré dans le journal
Après le démarrage,Si vous rencontrez une exécution lenteSQL,Et il sort dans le journal
6 spring Surveillance
Après la visitespringLa surveillance par défaut n'a pas de données;
Il faut importerSprngBootDeAOPDeStarter
<!--SpringBoot Deaop Module--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency>
Besoin de application.yml Configuration:
SpringSurveillanceAOPPoint d'entrée,Par exemple:com.springboot.template.dao.*,Configurer plusieurs séparations de virgules anglaises
spring.datasource.druid.aop-patterns="com.springboot.template.dao.*"
7 Vas - y. Ad(Publicité)
Lors de l'accès à la page de surveillance,Vous pourriez être au bas de la page(footer)Voir l'annonce d'Alibaba
Raisons:IntroductiondruidDejarDans le sac common.js
(Il y a un paragraphe à l'intérieur.jsLe Code est pour la pagefooterAnnonces supplémentaires)
Si vous voulez l'enlever,,Il y a deux façons:
(1) Annotation manuelle directe de ce code
Si utiliséMaven,Directement dans l'entrepôt local,Trouve ça.jarSac
Code à annoter:
// this.buildFooter();
common.jsEmplacement:
com/alibaba/druid/1.1.23/druid-1.1.23.jar!/support/http/resources/js/common.js
(2) Filtrer à l'aide d'un filtre
Enregistrer un filtre,Filtrationcommon.jsDemandes,Remplacer le contenu publicitaire pertinent par une expression régulière
@[email protected]@AutoConfigureAfter(DruidDataSourceAutoConfigure.class)@ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled",havingValue = "true", matchIfMissing = true)public class RemoveDruidAdConfig { /** * Nom de la méthode: removeDruidAdFilterRegistrationBean * Description de la méthode Supprimer les annonces au bas de la page * @param properties com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties * @return org.springframework.boot.web.servlet.FilterRegistrationBean */ @Bean public FilterRegistrationBean removeDruidAdFilterRegistrationBean(DruidStatProperties properties) { // AccèswebParamètres de la page de surveillance DruidStatProperties.StatViewServlet config = properties.getStatViewServlet(); // Extractioncommon.jsChemin de configuration pour String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*"; String commonJsPattern = pattern.replaceAll("\\*", "js/common.js"); final String filePath = "support/http/resources/js/common.js"; //CréationfilterFiltrer Filter filter = new Filter() { @Override public void init(FilterConfig filterConfig) throws ServletException {} @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); // Réinitialiser le tampon,L'en - tête de réponse ne sera pas réinitialisé response.resetBuffer(); // Accèscommon.js String text = Utils.readFromResource(filePath); // Remplacement régulierbanner, Supprimer les messages publicitaires en bas text = text.replaceAll("<a.*?banner\"></a><br/>", ""); text = text.replaceAll("powered.*?shrek.wang</a>", ""); response.getWriter().write(text); } @Override public void destroy() {} }; FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(filter); registrationBean.addUrlPatterns(commonJsPattern); return registrationBean; }}
Les deux peuvent,Il est recommandé d'utiliser le premier,S'attaquer aux causes profondes
8 Accès Druid Données de surveillance pour
Druid Les données de surveillance de Ouvert StatFilter Après ,Adoption DruidStatManagerFacade
Obtenir;DruidStatManagerFacade#getDataSourceStatDataList
Cette méthode permet d'obtenir des données de surveillance pour toutes les sources de données,
En plus de ça, DruidStatManagerFacade
D'autres méthodes sont également disponibles,Vous pouvez choisir d'utiliser.
@[email protected](value = "/druid")public class DruidStatController { @GetMapping("/stat") public Object druidStat(){ // Obtenir les données de surveillance de la source de données return DruidStatManagerFacade.getInstance().getDataSourceStatDataList(); }}
<END>
Lectures recommandées:
Internet Junior Senior large Factory Interview Question (9- Oui.G)ContenuJavaBase、JavaWeb、MySQLOptimisation des performances、JVM、Verrouillage、Millions de concurrence、File d'attente des messages、Cache haute performance、Réflexe、SpringPrincipe du seau familial、Microservices、Zookeeper......Pile isotechnique! .Réception du texte original ! Je l'ai lu.
Auteur:Le chemin de la croissance des programmeurs
Programmation de jeux,Un favori pour le développement de jeux~
Si l'image n'est pas affichée depuis longtemps,Veuillez utiliserChromeNavigateur du noyau.