Druid est un pool de connexions de base de données open source d'Alibaba, qui offre d'excellentes fonctions de surveillance pour les opérations de base de données. Cet article expliquera comment intégrer Druid dans le projet Springboot.
Cet article est développé dans un projet basé sur JPA. Tout d'abord, des dépendances Druid supplémentaires sont ajoutées au fichier POM. Le fichier POM est le suivant:
<? xml version = "1.0" Encoding = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" XSI: ScheMalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion> 4.0.0 </démavelSion> <ProupId> com.dalaang </prandId> <ArtefactId> Springboot_Druid </ Arfactive> <DERSE> 0.0.1-Snapshot </DERNIFRATION> <CADPACKAGE> JAR </ Packaging> <name> Springboot_Druid </name> <escriting> Springboot_Druid </Scriptid> <parent> <proupId> org.springFramework.boot </preppled> <ArtefactId> Spring-Boot-Starter-Parent </ ArfactId> <Dersion> 1.5.12.Release </DERNIERS> <RelativePath /> <! - Recherche Parent du référentiel -> </parent> </ Properties> <Project.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <proupId> org.springframework.boot </proupId> <Artifactid> printemps-boot-starter-web </ artifactid> </pedigency> <dependency> <prouprid> org.springframework.boot </proupId> <ptetifactid> printemps </scope> </stifactid> <scope> </cope> <dependency> <proupId> mysql </proncId> <Ertifactid> mysql-connector-java </retifactid> <ccope> runtime </ccope> </dependency> <pedidency> <proupId> org.springframework.boot </proupId> <Artifactid> Spring-Boot-starter-test </stifactive> <scope> SPOPED> SPOPET>-starter-test </tifactive> <scope> SPOPED> SPOPED> SOCTED> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.28</version> </dependency> </dependencies> <build> <plugins> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </ plugin> </ plugins> </ build> </ project>
La première moitié de l'application.properties et le JPA intégré n'ont pas changé du tout. Certaines configurations de druides ont été ajoutées ci-dessous. Si vous ne comprenez pas la configuration de Druid, vous pouvez le vérifier en ligne. (Je pense que cet article est bien écrit, portail)
#Port Number Server.port = 8888 ## Valider lorsque Hibernate est chargé, vérifiez la création de la structure de la table de base de données ## Créer chaque fois que Hibernate est chargé, recréez la structure de la table de base de données, ce qui est la raison de la perte de données de table de base de données. ## Create-Drop Créé lorsque Hibernate est chargé, Exit est de supprimer la structure du tableau ## Update Chargement Hibernate met automatiquement à jour la structure de la base de données ## Valider Vérifiez la structure du tableau au démarrage, et ne créera pas la table ## Aucune ne fait rien lors des impressions console de démarrage.jpa.hibernate. sqlspring.jpa.show-sql = true ## Configuration de la base de données ## Adresse de base de données printemps.datasource.url = jdbc: mysql: // localhost: 3306 / test? caractères. printemps.datasource.password = root ## Database Driver Spring.datasource.driver-Class-Name = com.mysql.jdbc.driver # Voici différents # Si vous utilisez Druid, vous devez configurer une autre propriété Spring.Datasource.Typesprid.datasource.type = com.alibaba.druid.pool #Configuration Informations du pool de connexion # Initialize Size, minimum, maximum Spring.Datasource.InitialSize = 5 Spring.DataSource.minidle = 5 Spring.Datasource.maxactive = 20 # Configurez le temps pour obtenir le temps d'attente de la connexion Spring.Datasource.Maxwait = 60000 # Configurer la façon dont il faut pour effectuer un interview de détection pour détecter les conceptations de déficience pour effectuer une mise en œuvre pour effectuer un interview de détection pour détecter CONNECEAU est des millisecondes printemps.datasource.TimeBetweenEvictionRunsmillis = 60000 # Configurez le temps minimum pour une connexion pour survivre dans la piscine, l'unité est des millisecondes printemps.datasource.MinevictableIdleMemillis = 300000 printemps.datasource.testonborrow = false printemps.datasource.testonreturn = false # ouvrir PSCCACHE et spécifiez la taille de PSCACHE sur chaque connexion Spring.Datasource.poolPreparedStatements = True Spring.Datasource.MaxpoolPreparedStatumentPerConnectionize = 20 # Configurer des filtres pour surveiller les statistiques interdits. Après l'avoir retiré, l'interface de surveillance SQL ne peut pas être comptée. 'wall' est utilisé pour le pare-feu Spring.datasource.filters = stat, wall, log4j # Utilisez la propriété ConnectProperties pour ouvrir la fonction MergesQL; Enregistrements SQL lents
Ajoutez ensuite DruidConfig au projet et expliquez brièvement que ce fichier de configuration charge principalement la configuration d'application.properties, et le code est le suivant:
package com.dalaoyang.config; import java.sql.sqlexception; import javax.sql.datasource; import org.apache.log4j.logger; import org.springframework.beans.factory.annotation.value; import org.springframework.contex org.springframework.context.annotation.configuration; import org.springframework.context.annotation.primary; import com.alibaba.druid.pool.druiddatasource; / ** * @Author dalaoyang * @description * @projectboot_learn * @package com.dalia [email protected] * @date 2018/4/12 * / @ ConfigurationPublic class druidConfig {private logger logger = logger.getLogger (this.getClass ()); @Value ("$ {printemps.datasource.url}") String privé dburl; @Value ("$ {printemps.datasource.username}") Private String Username; @Value ("$ {printemps.datasource.password}") Mot de passe de chaîne privée; @Value ("$ {printemps.datasource.driver-Class-name}") Private String DriverClassName; @Value ("$ {printemps.datasource.initialSize}") private int initialSize; @Value ("$ {printemps.datasource.minidle}") private int MinIdle; @Value ("$ {printemps.datasource.maxactive}") private int maxactive; @Value ("$ {printemps.datasource.maxwait}") private int maxwait; @Value ("$ {printemps.datasource.timebetweenvictionrunsmillis}") private int timebetweenvictionrunsmillis; @Value ("$ {printemps.datasource.minevictableidleMemillis}") private int minevictableidlememillis; @Value ("$ {printemps.datasource.validationQuery}") private String ValidationQuery; @Value ("$ {printemps.datasource.test WhileIdle}") Test booléen privé WHERIDLE; @Value ("$ {printemps.datasource.testonborrow}") Boolean Private TestOnBorrow; @Value ("$ {printemps.datasource.testonreturn}") Boolean private Testonreturn; @Value ("$ {printemps.datasource.poolPreparedStatements}") Boolean PoolPreparedStatements privé; @Value ("$ {printemps.datasource.maxpoolPreparedStatementPerConnectionsize}") private int maxpoolPreparedStatementPerConnectionsize; @Value ("$ {printemps.datasource.filters}") Filtres de chaîne privés; @Value ("{printemps.datasource.connectionProperties}") Connection Private ConnectionProperties; @Bean @primary // source de données principale publique DataSource DataSource () {DruidDataSource dataSource = new DruidDataSource (); DataSource.SetUrl (this.dburl); DataSource.SetUsername (nom d'utilisateur); DataSource.SetPassword (mot de passe); DataSource.setDriverClassName (DriverClassName); // Configuration DataSource.SetInitialSize (initialSize); DataSource.setMinIdle (minidle); dataSource.setMaxActive (maxactive); DataSource.setMaxWait (Maxwait); dataSource.setTimeBetweenvictionRunsmillis (TimeBetweenEvictionRunsMillis); DataSource.setMinevictableIdleMemillis (MineVictableIdleMemillis); DataSource.SetValidationQuery (validationQuery); DataSource.SetTest WhileIdle (Test WhenIdle); DataSource.setTestonBorrow (TestOnBorrow); DataSource.setTestonreturn (testonreturn); DataSource.SetPoolPreparedStatements (PoolPreparedStatements); DataSource.SetMaxPoolPreparedStatementPerConnectionsize (MaxPoolPreparedStatementPerConnectionsize); essayez {dataSource.setFilters (filtres); } catch (sqlexception e) {Logger.Error ("Exception de configuration Druid", e); } dataSource.setConnectionProperties (ConnectionProperties); return dataSource; }}
Créez ensuite un DruidFilter, le code est le suivant:
Package com.dalaoyang.filter; import javax.servlet.annotation.webfilter; import javax.servlet.annotation.webinitparam; import com.alibaba.druid.support.http.webstatfilter; / ** * @author dalaoyang * @Description * @project com.dalaoyang.filter * @email [email protected] * @date 2018/4/12 * / @ webfilter (filterName = "DruidWebstatFilter", urlPatterns = "/ *", initparams = { @WebinitParam (name = "exclusions", value = "*. Js, *. Gif, *. Jpg, *. BMP, *. Png, *. CSS, *. ICO, / Druid / *") // Ignore Resources}) public class DruidFilter étend WebStatfilter {}
Créez un nouveau DruidServlet, ajoutez l'annotation à la classe @webservlet, qui configure le mot de passe du compte pour la connexion à la page de surveillance Druid, la liste blanche et les configurations de liste noire, le code est le suivant:
Package com.dalaoyang.servlet; import javax.servlet.annotation.webinitparam; import javax.servlet.annotation.webservlet; Importer com.alibaba.druid.support.http.statviewservlet; / ** * @author dalaoyang * @Descript com.dalaoyang.servlet * @email [email protected] * @date 2018/4/12 * / @ Webservlet (urlpatterns = "/ druid / *", initparams = {@webinitparam (name = "allow", value = ""), // IP Whitelist (pas de configuration ou vide, tout l'accès est autorisé). @WebinitParam (name = "deny", value = ""), // ip BlackList (deny prend la priorité sur permettre) @webinitam (name = "LoginuserName", value = "admin"), // se connecter à la page de gestion de Druid username @ webinitparam (name = "LoginPassword", value = "admin") // DruidServlet étend StatViewServlet {}
Ajoutez ensuite l'annotation @servletcomponentscan à la classe de démarrage et laissez le projet numériser au servlet. Le code est le suivant:
package com.dalaoyang; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.boot.web.servlet.servletcomponents Annotation, sinon il ne peut pas être scanné à servlet @ servletcomponentsCan classe publique SpringbootDruidApplication {public static void main (String [] args) {SpringApplication.run (SpringbootDruidApplication.class, args); }}Les autres sont la même entité (classe d'entité), le référentiel (couche de fonctionnement de données), le contrôleur (contrôleur utilisé pour les tests) en tant que JPA intégré, qui affiche directement le code.
Ville
Package com.dalaoyang.entity; Importer Javax.Persistence. *; / ** * @author dalaoyang * @description * @project springboot_learn * @package com.dalaoyang.entity * @email [email protected] * @date 2018/4/7 * / @ entity @ table @GeneratedValue (Strategy = GenerationType.Auto) private int CityId; Cityname à chaîne privée; String privé CityIntroduce; Public City (int CityId, String Cityname, String CityIntroduce) {this.cityId = CityId; this.cityName = CityName; this.cityIntroduce = CityIntroduce; } Public City (String CityName, String CityIntroduce) {this.cityName = CityName; this.cityIntroduce = CityIntroduce; } public City () {} public int getCityId () {return CityId; } public void SetCityId (int CityId) {this.cityId = CityId; } public String getCityName () {return CityName; } public void setCityName (String CityName) {this.cityName = CityName; } String public getCityIntroduce () {return CityIntroduce; } public void SetCityIntroduce (String CityIntroduce) {this.cityIntroduce = CityIntroduce; }}
CityRepository
package com.dalaoyang.repository; import com.dalaoyang.entity.city; import org.springframework.data.jpa.repository.jparepository; / ** * @author dalaoyang * @description * @project springboot_learn * @package com.dalaoyang.repository * @emai [email protected] * @Date 2018/4/7 * / Interface publique CityRepository étend JParepository <ville, entier> {}
Collège
package com.dalaoyang.controller; import com.dalaoyang.entity.city; import com.dalaoyang.repository.cityRepository; import org.springframework.beans.factory.annotation.autowired; import org.springframework.web.bind.annotation.getmaping; import; org.springframework.web.bind.annotation.restController; / ** * @Author Dalaoyang * @description * @project springboot_learn * @package com.dalaoyang.Controller * @email [email protected] * @date 2018/4/7 * / / @ repostrollerrs @Autowired Private CityRepository CityRepository; // http: // localhost: 8888 / Savecity? CityName = beijing & cityIntroduce = china's Capital @getMapping (value = "Savecity") public String Savecity (String CityName, String CityIntroduce) {City City = New City (CityName, CityIntroce); CityRepository.Save (City); retourner le "succès"; } // http: // localhost: 8888 / Deletecity? CityId = 2 @getMapping (value = "Deletecity") public String Deletecity (int CityId) {CityRepository.Delete (CityId); retourner le "succès"; } // http: // localhost: 8888 / updatecity? CityId = 3 & CityName = Shenyang & CityIntroduce = liaoning provincial capital @getmapping (value = "updatecity") public String UpdateCity (INT CityId, String CityName, CityInTroce); CityRepository.Save (City); retourner le "succès"; } // http: // localhost: 8888 / getCityByid? CityId = 3 @getMapping (value = "getCityByid") Public City GetCityByid (int CityId) {City City = CityRepository.FindOne (CityId); Retour City; }}
Commencez ensuite le projet et vous pouvez voir que la console a créé la table de la ville.
Visitez ensuite http: // localhost: 8888 / druid et vous pouvez voir la figure suivante:
Entrez le compte Mot de passe administrateur, admin, comme indiqué dans la figure suivante
Ensuite, à l'heure actuelle, nous pouvons visiter http: // localhost: 8888 / Savecity? CityName = Beijing & CityIntroduce = la capitale chinoise
Cliquez ensuite sur la surveillance SQL ci-dessus, comme indiqué dans la figure ci-dessous.
D'après la figure ci-dessus, vous pouvez voir que le SQL qui a commencé la table de création de projet vient d'être exécuté. L'intégration est terminée ici.
Téléchargement du code source: https://gitee.com/dalaoyang/springboot_learn
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.