Druid es un grupo de conexión de base de datos de código abierto de Alibaba, que proporciona excelentes funciones de monitoreo para las operaciones de la base de datos. Este artículo explicará cómo integrar Druid en el proyecto SpringBoot.
Este artículo se desarrolla bajo un proyecto basado en JPA. Primero, se agregan dependencias de druidas adicionales al archivo POM. El archivo POM es el siguiente:
<? xml versión = "1.0" encoding = "utf-8"?> <Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschemainstance" xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <ModelVersion> 4.0.0 </modelversion> <MoupRoMid> Com.dalaoyang </200Ed> <AtifactId> SpringBoot_druid </arfactid> <versión> 0.0.1-snapshot </versions> <packaging> jar </paquete> <name> springboot_druid </name> <scription> springboot_druid </description> <entrement> <grupid> org.springframework.boot </proupid> <artifactID> Spring-Boot-Starter-Parent </artifactid> <versión> 1.5.12.Release </versewer> <relativePath/> <!-Buscar padres desde repositorio-> </rent> <propers> <jecter.build.sourceEncoding> utf-8 </project.build.sourceeninging <Project.Reporting.outputenCoding> UTF-8 </project.rePorting.outputEncoding> <java.version> 1.8 </java.version> </propiences> <pendencies> <epardency> <grupo> org.springFrameWork.Boot </groupId> <Atifactid> spring-boot-starter-data-JPA <JPAFid> </pendency> <pendency> <uproupid> org.springframework.boot </proupid> <artifactID> spring-boot-starter-web </artifactid> </pendency> <epardency> <proupid> org.springframework.boot </proupid> <arfactiD> throin-boot-boot-devtools </artifactid> <scopeope> <scopeope> <scopeope> </pendency> <epardency> <uproupId> mysql </groupid> <artifactid> mysql-connector-java </arfactid> <cope> runtime </cope> </pendency> <epardency> <proupid> org.springFrame.boot </groupid> <artifactid> spring-boot-starter-test </artid> <cope> test </scope> </pepertency> <epardency> <grupid> com.alibaba </groupid> <artifactid> druid </artifactid> <versión> 1.0.28 </versión> </pendency> </pendencies> <1t build> <glugins> <uproupid> org.springframework.boot </proupid> <artifactID> spring-boot-saven-plugin </artifactid> </glugin> </glugins> </build> </proyecto>
La primera mitad de la aplicación. Properties y el JPA integrado no han cambiado en absoluto. A continuación se han agregado algunas configuraciones de druidas. Si no comprende la configuración de Druid, puede verificarlo en línea. (Creo que este artículo está bien escrito, portal)
#Port Number Server.port = 8888 ## Validato Cuando Hibernate está cargado, verifique la creación de la estructura de la tabla de la base de datos ## Crear cada vez que se cargue Hibernate, recree la estructura de la tabla de la base de datos, que es la razón de la pérdida de datos de la tabla de la base de datos. ## Crear-DROP creado cuando se carga Hibernate, la salida es eliminar la estructura de la tabla ## Actualizar la carga de Hibernate Actualiza automáticamente la estructura de la base de datos ## Validar verificar la estructura de la tabla al comenzar, y no creará la tabla ## Ninguno No haga nada al comenzar Spring.jpa.hibernate.ddl-auto = Create ## PRIMA DE CONSOLE sqlspring.jpa.show-sql = true ## Configuración de la base de datos ## Dirección de la base de datos Spring.datasource.url = jdbc: mysql: // localhost: 3306/test? caracterSencoding = Utf8 & Usessl = false ## dataBase usernerner.datasource.usernam e = raíz ## CASACIÓN DE DATABASE DETABASE spring.datasource.password = root ## Database Driver Spring.datasource.driver-class-name = com.mysql.jdbc.driver#Aquí hay diferentes#si usa druid, debe configurar una propiedad más spring.dataSource.typespring.datasource.type = com.alibaba.druid.pool.pool.prool.prool.Prool.Prource del grupo de conexión de conexión # inicializar el tamaño, mínimo, spring máximo.dataSource.initialSize = 5 spring.datasource.minidle = 5 spring.dataSource.maxactive = 20 # Configure el tiempo para obtener la conexión que espera el tiempo de espera de la conexión. spring.dataSource.TimeBetweenEvictionRunsMillis = 60000 # Configure el tiempo mínimo para que una conexión sobrevivirá en el grupo, la unidad es milisegunds spring.datasource.mineVictableidletImillis = 300000 spring.dataSource.validationQuery = seleccionar 1 de dual spring.dataSource.testileidle = verdadero verdad spring.datasource.testonBorrow = false spring.datasource.testonreturn = false # abre pscache y especifique el tamaño de pscache en cada conexión spring.dataSource.poolPreparedStatements = true Spring.dataSource.MaxPoolPreparedRementMementPonConnectionsize = 20 # Filtros de configuración para monitorear las estadísticas de las estadísticas. Después de eliminarlo, la interfaz de monitoreo SQL no se puede contar. 'Wall' se usa para Firewall Spring.datasource.filters = stat, wall, log4j# Use la propiedad ConnectProperties para abrir la función mergesql; Registros SQL lentos
Luego agregue DruidConfig al proyecto y explique brevemente que este archivo de configuración carga principalmente la configuración de Application.Properties, y el código es el siguiente:
paquete com.dalaoyang.config; import java.sql.sqlexception; import javax.sql.dataSource; importar org.apache.log4j.logger; importar org.springframework.beans.factory.annotation.value; import org. @email [email protected] * @date 2018/4/12 */ @ConfigurationPublic Class DruidConfig {private logger logger = logger.getLogger (this.getClass ()); @Value ("$ {spring.datasource.url}") cadena privada dburl; @Value ("$ {spring.dataSource.Username}") Nombre de usuario de cadena privada; @Value ("$ {spring.dataSource.password}") contraseña de cadena privada; @Value ("$ {spring.dataSource.driver-class-name}") String private DriverClassName; @Value ("$ {spring.datasource.initialsize}") private int inicialSize; @Value ("$ {spring.dataSource.minidle}") private int minidle; @Value ("$ {spring.dataSource.maxactive}") private int maxactive; @Value ("$ {spring.dataSource.maxwait}") private int maxwait; @Value ("$ {spring.dataSource.timebetweenEvictionRunsmillis}") privado int timetweenEvictionRunsMillis; @Value ("$ {spring.dataSource.MinevictableIdletimemillis}") private int min mineVictableIdletImillis; @Value ("$ {spring.dataSource.ValidationQuery}") Private String ValidationQuery; @Value ("$ {spring.dataSource.test whelleidle}") Prueba booleana privada WhipleIdle; @Value ("$ {spring.datasource.testonborrow}") privado boolean testonborrow; @Value ("$ {spring.dataSource.testonreturn}") Private boolean testOnreturn; @Value ("$ {spring.dataSource.poolpreparedStatements}") privado boolean piscolpreparedStatements; @Value ("$ {spring.dataSource.maxPoolPreparedStatementConConnectsize}") private int maxPoolPreparedStatementPonConnectsize; @Value ("$ {spring.dataSource.filters}") filtros de cadena privada; @Value ("{Spring.DataSource.ConnectionProperties}") privado String ConnectionProperties; @Bean @Primary // Principal fuente de datos DataSource DataSource () {DruidDataSource DataSource = new DruidDataSource (); dataSource.setUrl (this.dburl); dataSource.setUsername (nombre de usuario); dataSource.setPassword (contraseña); dataSource.setDrivClassName (DriverClassName); // Configuración DataSource.SetInitialSize (InitialSize); dataSource.setminidle (minidle); DataSource.SetMaxActive (MaxActive); DataSource.SetMaxWait (MaxWait); DataSource.SetTimeBetweenEvictionRunsMillis (TimetweenEvictionRunsMillis); dataSource.SetMinevictableIdletimemillis (minevictableidletimillis); DataSource.SetValidationQuery (ValidationQuery); dataSource.Settest WhipleIdle (test WhipleIdle); DataSource.SettonBorrow (testOnBorrow); dataSource.settestonreturn (testOnreturn); dataSource.setPoolPreparedStatements (PoolPreparedStatements); DataSource.SetMaxPoolPreparedStatementPonConnectsize (MaxPoolPreparedStatementPonnectsize); intente {dataSource.setFilters (filtros); } Catch (SQLException e) {logger.error ("excepción de configuración de druid", e); } DataSource.SetConnectionProperties (ConnectionProperties); devolver datos de datos; }}
Luego cree un DruidFilter, el código es el siguiente:
paquete com.dalaoyang.filter; import javax.servlet.annotation.webfilter; import javax.servlet.annotation.webinitparam; import com.alibaba.druid.support.http.webstatfilter; com.dalaoyang.filter * @email [email protected] * @date 2018/4/12 */ @webfilter (filtername = "druidwebstatfilter", urlpatterns = "/ *", initParams = { @WebinitParam (name = "EXCLUSIONES", VALOR = "*. JS,*. GIF,*. JPG,*. BMP,*. PNG,*. CSS,*. ICO,/DRUID/*") // Ignore Resources}) Class pública Druidfilter extiende WebStatFilter {}
Cree un nuevo DruidServlet, agregue anotación a la clase @WebServlet, que configura la contraseña de la cuenta para iniciar sesión en la página de monitoreo Druid, la lista blanca y las configuraciones de la lista negra, el código es el siguiente:
paquete com.dalaoyang.servlet; import javax.servlet.annotation.webinitParam; import javax.servlet.annotation.webservlet; import com.alibaba.druid.support.http.statviewservlet;/** * @author dalayang * @description * @project springBoot * com.dalaoyang.servlet * @email [email protected] * @date 2018/4/12 */ @webservlet (urlpatterns = "/druid/ *", initParams = {@webinitparam (name = "permitiendo", valor = ""), // whitelist (no se permite la configuración o vacío o vacío) @WebinitParam (name = "deny", value = ""), // ip BlackList (Deny Toma Precedencia sobre permitirse) @WebinitParam (name = "LoginUsername", value = "Admin"), // Iniciar sesión en la página de administración Druid UserName @WebInitParam (name = "LoginPassword", Value = "Admin") //ic DruidServlet extiende StatViewServlet {}
Luego agregue la anotación @ServletComponentsCan a la clase de inicio y deje que el proyecto escanee al servlet. El código es el siguiente:
paquete com.dalaoyang; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.boot.web.servlet.servletComponentscan; @treingbootapplication // la startup de la startup. Anotación, de lo contrario, no se puede escanear como servlet@servletComponentscan clase pública springbootdruidapplication {public static void main (string [] args) {springapplication.run (springbootdruidapplication.class, args); }}El resto es la misma entidad (clase de entidad), repositorio (capa de operación de datos), controlador (controlador utilizado para probar) como JPA integrado, que muestra directamente el código.
Ciudad
paquete com.dalaoyang.entity; import javax.persistence. *;/** * @author dalaoyang * @Description * @project springboot_learn * @package com.dalaoyang.entity * @email [email protected] * @date 2018/4/7 */ @entity @stable (name = "City") @GeneratedValue (Strategy = GenerationType.auto) Private int cityid; String privado CityName; Ciudad privada 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; } public String getCityInTroDuce () {return CityInTroDuce; } public void setCityIntrroduct (String CityInTroDuce) {this.cityIntrroduce = CityInTroDuce; }}
Profesor de ciudad
paquete com.dalaoyang.repository; import com.dalaoyang.entity.city; import org.springframework.data.jpa.repository.jparpository;/** * @author dalaoyang * @Description * @Project SpringBoot_learn * @Package com.dalayang.Repository * @Email [email protected] * @Date 2018/4/7 */Public Interface CityRepository extiende jParepository <City, Integer> {}
Controlador de la ciudad
paquete 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.getMapping; import org.springframework.web.bind.annotation.restController;/** * @author dalaoyang * @description * @project springboot_learn * @package com.dalayang.controller * @email [email protected] * @date 2018/4/7 */ @restlontrollerper @AutoWired private CityRepository CityRepository; // http: // localhost: 8888/saveCity? CityName = Beijing & CityInTroDuce = China's Capital @getMapping (valor = "Savecity") Public String SaveCity (String CityName, String CityInTroDuce) {City City = New City (CityName, CityIntroduce); CityRepository.save (Ciudad); devolver "éxito"; } // http: // localhost: 8888/deletecity? cityid = 2 @getmapping (valor = "deletecidad") public String DeleteCity (int cityId) {cityRepository.Delete (CityId); devolver "éxito"; } // http: // localhost: 8888/updateCity? cityid = 3 & cityName = shenyang & cityInTroDuce = Liaoning Provincial Capital @getMapping (valor = "UpdateCity") Public String UpdateCity (intit CityId, String Name, String CityIntroduce) {City City = New City (New City (CityName, Name, CityIdCe); CityRepository.save (Ciudad); devolver "éxito"; } // http: // localhost: 8888/getCityByid? Cityid = 3 @getMapping (valor = "getCityByid") Ciudad pública GetCityByid (int Cityid) {City City = CityRepository.Findone (Cityid); ciudad de regreso; }}
Luego comience el proyecto y puede ver que la consola ha creado la mesa de la ciudad.
Luego visite http: // localhost: 8888/druid y puede ver la siguiente figura:
Ingrese el administrador de la contraseña de la cuenta, admin, como se muestra en la figura a continuación
Luego, en este momento, podemos visitar http: // localhost: 8888/Savecity? CityName = Beijing & CityIntroDuce = Capital de China
Luego haga clic en el monitoreo SQL arriba, como se muestra en la figura a continuación.
De la figura anterior, puede ver que el SQL que inició la tabla de creación del proyecto acaba de ser ejecutado. La integración se ha completado aquí.
Descarga del código fuente: https://gitee.com/dalaoyang/springboot_learn
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.