O Druid é um pool de conexão de banco de dados de código aberto da Alibaba, que fornece excelentes funções de monitoramento para operações de banco de dados. Este artigo explicará como integrar o Druid no projeto Springboot.
Este artigo foi desenvolvido sob um projeto baseado em JPA. Primeiro, dependências druidas adicionais são adicionadas ao arquivo POM. O arquivo POM é o seguinte:
<? xml versão = "1.0" coding = "utf-8"?> <Projeto xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.ww3.org/2001/xmlschaMance xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVesion> 4.0.0 </modelVersion> <proupid> com.daliding <rUerpalang> 4.0.0 </modelversion> <proupid> com.dalid <rumerang> 4.0.1 <TrAtifactId> springboot_druid </starifactId> <versão> 0.0.1-snapshot </version> <bacaging> jar </acheging> <name> springboot_druid </name> <cription> springboot_druid </criptely> <roust> <puriid> org.springFramework.boot </grupo <TarifactId> Spring-Boot-Starter-Parent </stardifactId> <versão> 1.5.12.Release </siers> <RelityPath/> <!-Lookup Parent from Repository-> </parent> </projecties> <projeto.build.sourcencoding> utf-8 </projecties> <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> <pendence> <puperid> org.springframework.boot </frugiD> <ArtifactId> Spring-boot-starter-web </stutifactId> </dependency> <pendence> <purgid> org.springframework.boot <//Groupid> <Artifactid> SCELOT-BOOT-DEV-DROT-DROTOOL </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <cope> test </cope> </dependency> <pendence> <puperid> com.alibaba </groupiD> <stifactId> druid </artifactId> <versão 1.0.28 </version> </dependency> </dependencies> <fuild> <flugins> <plugId> org.springfamework.Boot </ipendencies> <fruct> <plugins> <plugiM> org.springframework.Boot </ipendences> <fruct> <plugins> <plugiM> <TarifactId> Spring-boot-maven-plugin </stifactId> </flugin> </plugins> </fruct> </project>
A primeira metade do Application.Properties e o JPA integrado não mudaram. Algumas configurações druidas foram adicionadas abaixo. Se você não entende a configuração do Druid, poderá verificar on -line. (Acho que este artigo está bem escrito, portal)
#Port número server.port = 8888 ## Validar Quando o hibernato é carregado, verifique a criação da estrutura da tabela de banco de dados ## Criar cada vez que o hibernato é carregado, recrie a estrutura da tabela de banco de dados, que é o motivo da perda de dados da tabela de banco de dados. ## Create-Drop criado quando o hibernato é carregado, a saída é excluir a estrutura da tabela ## atualizar o carregamento de hibernação atualiza automaticamente a estrutura do banco de dados ## Validar verificar a estrutura da tabela ao iniciar e não criar tabela ## não faz nada ao iniciar spring.jpa.hibernate.ddl-auto = ## Console. Configuração ## Endereço do banco de dados spring.dataSource.url = jdbc: mysql: // localhost: 3306/teste? caracterencoding = utf8 & usessl = false ## Database username spring.dataSource.usernam e = root ## Datase senha Spring.datasource.data spring.dataSource.Driver-class-name = com.mysql.jdbc.driver# Aqui é diferente# Se você usar o druid, você precisa configurar mais uma propriedade spring.dataSource.typespring.dataSource.type = com.aliba.druid.pool.DruidDatas spring.dataSource.initialSize = 5 spring.dataSource.Minidle = 5 spring.dataSource.maxactive = 20 # Configure o tempo para obter a conexão que aguarda o tempo limite spring.dataSource.Maxwait = 60000 # Configure quanto tempo usa um intervalo de detecção para detectar idas spring.dataSource.TimeBetweenEvictionRunsmillis = 60000 # Configure o tempo mínimo para uma conexão sobreviver na piscina, a unidade é milissegundos spring.dataSource.mineVictableIdLetimEmillis = 300000 spring.datasource.validationQuery = select 1 de Dual Spring.DaSTAS.DATAS. spring.dataSource.testonborrow = false spring.dataSource.testOnReturn = false # Abra o pscache e especifique o tamanho do pscache em cada conexão spring.dataSource.PoolPreparedStatements = Spring.DataSource.MaxPoolPeedStatementConectionSteme. Depois de removê -lo, a interface de monitoramento SQL não pode ser contada. 'Wall' é usado para firewall spring.dataSource.filters = stat, parede, log4j# use a propriedade ConnectProperties para abrir a função Mergesql; Records SQL lentos
Em seguida, adicione o DruidConfig ao projeto e explique brevemente que esse arquivo de configuração carrega principalmente a configuração do Application.properties, e o código é o seguinte:
pacote com.dalaoyang.config; importar java.sql.sqLexception; importar javax.sql.datasource; importar org.apache.log4j.logger; importação org.springframework.beans.actory.annotation.value; org.springframework.context.annotation.configuration; importar org.springframework.context.annotation.primary; importar com.alibaba.druid.pool.druiddataSource;/** * @author Dalaoyang * @Description * @SProject_Project; @email [email protected] * @date 2018/4/12 */ @ConfigurationPublic Classe druidConfig {private logger logger = logger.getLogger (this.getclass ()); @Value ("$ {spring.datasource.url}") private string dburl; @Value ("$ {spring.datasource.username}") private string userName; @Value ("$ {spring.datasource.password}") private string senha; @Value ("$ {spring.datasource.driver-class-name}") private string driverclassName; @Value ("$ {spring.datasource.initialsize}") private int InitialSize; @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 timebetweenEvictionRunsmillis; @Value ("$ {spring.dataSource.mineVictableIdletimemillis}") private int minevictableIdletimemillis; @Value ("$ {spring.datasource.validationQuery}") private String validationQuery; @Value ("$ {spring.datasource.testwhileidle}") private boolean testhileidle; @Value ("$ {spring.datasource.testonborrow}") private boolean testonborrow; @Value ("$ {spring.dataSource.testoNreturn}") Private Boolean testOnReturn; @Value ("$ {spring.dataSource.poolPreparedStatements}") privado boolean poolpreparedstatements; @Value ("$ {spring.dataSource.maxpoolPreparedStateMementPonConectionsize}") private int maxpoolPreparedStatementPerConnectionsize; @Value ("$ {spring.datasource.filters}") filtros de sequência privada; @Value ("{spring.datasource.connectionproperties}") private string ConnectionProperties; @Bean @Primary // principal fonte de dados public DataSource DataSource () {druidDataSource DataSource = new DruidDataSource (); DataSource.seturl (this.dburl); DataSource.setUserName (nome de usuário); DataSource.SetPassword (senha); DataSource.SetDriverClassName (DriverClassName); // Configuração DataSource.SetInitialSize (InitialSize); DataSource.setminidle (minidle); DataSource.SetMaxActive (maxactive); DataSource.setMaxWait (Maxwait); dados DataSource.setMineVictableIdLeTimemillis (MineVictableIdLetimEmillis); DataSource.SetValidationQuery (validationQuery); DataSource.setTestwhileIdle (testhileidle); DataSource.setTestonBorrow (testonborrow); DataSource.SetTestOnReturn (testOnReturn); DataSource.SetPoolPreparedStatements (PoolPreparedStatements); DataSource.setMaxPoolPreparedStatementPerConnectionsize (MaxPoolPreparedStatementPerConnectionsize); tente {DataSource.SetFilters (filtros); } catch (sqLexception e) {Logger.error ("Exceção de configuração druid", e); } DataSource.setConnectionProperties (ConnectionProperties); return DataSource; }}
Em seguida, crie um DruidFilter, o código é o seguinte:
pacote com.dalaoyang.filter; importar javax.servlet.annotation.webfilter; importar javax.servlet.annotation.webinitparam; importar com.alibaba.druid.support.http.webstatfilter;/** * @Athornor Dnalayning.http.webstatfilter;/** * @Athor DalaNay @package com.dalaoyang.filter * @email [email protected] * @date 2018/4/12 */ @webfilter (filterame = "druidwebstatfilter", urlpatterns = "/ *", initparams = {{ @Webinitparam (name = "exclusões", value = "*. JS,*. Gif,*. Jpg,*. Bmp,*.
Crie um novo DruidServlet, adicione anotação à classe @WebServlet, que configura a senha da conta para fazer login na página de monitoramento Druid, na lista de permissões e na lista negra, o código é o seguinte:
pacote com.dalaoyang.servlet; importar javax.servlet.annotation.webinitparam; importar javax.servlet.annotation.webServlet; importar com.alibaba.druid.support.http.statievertletrlet; com.dalaoyang.servlet * @email [email protected] * @date 2018/4/12 */ @webServlet (urlpatterns = "/druid/ *", initParams = {@webinitparam (nome = "permitir", value = ""), // @WebinitParam (name = "neny", value = ""), // ip BlackList (negar tem precedência sobre permitir) @webinitparam (name = "loginusername", value = "admin"), // efetua login), que não é o nome da página de gerenciamento druid @webinitParam (names (nome ") // DruidServlet estende o StatViewServlet {}
Em seguida, adicione a anotação @ServletComponentsCan à aula de inicialização e deixe o projeto digitalizar o servlet. O código é o seguinte:
pacote com.dalaoyang; importar org.springframework.boot.springApplication; importar org.springframework.boot.autoconfigure.springbootapplication; importomentComentsCrantWringwork.boot.web.servlet.servletComPoNEntsCanscan; anotação, caso contrário, não pode ser digitalizada para servlet@servletComponentsCan public class SpringbootDruidApplication {public static void main (string [] args) {springapplication.run (springbootdruidApplication.class, args); }}O restante é a mesma entidade (classe de entidade), repositório (camada de operação de dados), controlador (controlador usado para teste) como JPA integrado, que exibe diretamente o código.
Cidade
pacote com.dalaoyang.entity; importar javax.persistence. *;/** * @author dalaoyang * @Description * @Project Springboot_learn * @package com.dalaoyang.entity * @email [email protected] * @Date 2018/47/47 * @Email @GeneratedValue (estratégia = generationType.auto) privado int cityId; CityName de cordas privadas; String private 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 setCityIntroduce (String CityIntroduce) {this.cityIntroduce = CityIntroduce; }}
CityRepository
pacote com.dalaoyang.repository; importar com.dalaoyang.entity.city; importar org.springframework.data.jpa.repository.jparepository;/** * @author dalaoyang * @description * @project springboot_learn * @packor com.dalank.dalank.DayMalE.DayMalE.Packor.DalAmalMalA.DalAmalE.DayMalE.DayMalE.DayMalE.dalAmalA.DayMalE.DayMalE.dalAmalE.DayMalE.dalAmalE.DayMalE.dalAmalE.DayMalE.DayMalE.DayMalA.DayMalE.DayMalE.DayMalA.DalAmal. [email protected] * @Date 2018/4/7 */interface pública CityRepository estende JPoSepository <City, Integer> {}
CityController
pacote com.dalaoyang.controller; importar com.dalaoyang.entity.city; importação com.dalaoyang.repository.cityRepository; importar org.springframework.bean.factory.annotation.autowired; imported.springframework.web.bind.annotation.annotation.anowired; imported.springringframework.web.bind.notation.annotation.annotation; org.springframework.web.bind.annotation.restcontroller;/** * @author dalaoyang * @description * @project springboot_learn * @package com.dalaoyang.controller * @email [email protected] *date {@AUTowired Private CityRepository CityRepository; // http: // localhost: 8888/Savecity? CityName = Beijing & CityIntroduce = Capital da China @getMapping (value = "Safecity") Public String Safecity (String CityName, String CityIntroduce) {City = New City (CityName, inintroduce); CityRepository.Save (cidade); retornar "sucesso"; } // http: // localhost: 8888/deletecity? CityId = 2 @getMapping (value = "DeleteCity") public String DeLeteCity (int CityId) {CityRepository.Delete (CityId); retornar "sucesso"; } // http: // localhost: 8888/updatecity? CityId = 3 & cityName = shenyang & cityIntroduce = Liaoning provincial capital @getmapping (value = "updatCity") public updatecity (cidade de string cityName, stringamEMTroduce) {) CityRepository.Save (cidade); retornar "sucesso"; } // http: // localhost: 8888/getCityById? CityId = 3 @getMapping (value = "getCityById") public city getCitybyId (int cityId) {cidade da cidade = cityRepository.findone (cityId); cidade de retorno; }}
Em seguida, inicie o projeto e você poderá ver que o console criou a tabela da cidade.
Em seguida, visite http: // localhost: 8888/druid e você pode ver a figura a seguir:
Digite o administrador da senha da conta, administrador, conforme mostrado na figura a seguir
Então, neste momento, podemos visitar http: // localhost: 8888/Savecity? CityName = Pequim & CityIntroduce = Capital da China
Em seguida, clique no monitoramento SQL acima, conforme mostrado na figura abaixo.
A partir da figura acima, você pode ver que o SQL que iniciou a tabela de criação do projeto acabou de ser executado. A integração foi concluída aqui.
Download do código -fonte: https://gitee.com/dalaoyang/springboot_learn
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.