Druid - это пул соединений с открытым исходным кодом от Alibaba, который предоставляет отличные функции мониторинга для операций базы данных. Эта статья объяснит, как интегрировать Druid в проект Springboot.
Эта статья разработана в рамках проекта на основе JPA. Во -первых, в файл POM добавляются дополнительные зависимости друида. POM -файл выглядит следующим образом:
<? 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"> <doliderversion> 4.0.0 </modelversion> <groupid> com.dalaoyang </GroupDsion> 4.0.0 <ratifactid> springboot_druid </artifactid> <sersive> 0.0.1-snapshot </version> <duckaging> jar </упаковка> <mame> springboot_druid </name> <description> springboot_druid </description> <parent> <groupid> org.spramework.boot </groupid> <ratfactid> Spring-Boot-Starter-parent </artifactid> <sersive> 1.5.12.release </version> <venterativePath/> <!-Поиск родителей от репозитория-> </parent> <properties> <project.build.sourceencoding> utf-8 </project.build.sourceenging> <project.reporting.outputencoding> UTF-8 </Project.Report.OutputEncoding> <java.version> 1.8 </java.version> </свойства> <Depertiencies> <Depective> <groupId> org.springframework.boot </GroupID> <StrifactId> spring-boot-starter-jata-j-j-j-j-j-j <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </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> <scope>test</scope> </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>
Первая половина приложения. Прозрачные и интегрированные JPA вообще не изменились. Некоторые конфигурации друид были добавлены ниже. Если вы не понимаете конфигурацию Druid, вы можете проверить ее в Интернете. (Я думаю, что эта статья хорошо написана, портал)
#Port Number Server.port = 8888 ## проверка при загрузке Hibernate, проверьте создание структуры таблицы баз данных ## Создание каждый раз, когда загружается Hibernate, воссоздайте структуру таблицы баз данных, что является причиной потери данных таблицы базы данных. ##create-drop Created when hibernate is loaded, exit is to delete the table structure ##update Loading hibernate automatically updates the database structure ##validate Verify the structure of the table when starting, and will not create table ##none Do not do anything when starting spring.jpa.hibernate.ddl-auto=create##Console prints sqlspring.jpa.show-sql=true##Database Конфигурация ## Адрес базы данных spring.datasource.url = jdbc: mysql: // localhost: 3306/test? Характерпольгинг = utf8 & usessl = false ## database username spring.datasource.usernam e = root ## пароль базы данных Spring.datasource.password = root### Database Driver Driver Driver Database Driver Driver Driver Database Erю spring.datasource.driver-class-name = com.mysql.jdbc.driver# Вот разные# Если вы используете Druid, вам нужно настроить еще одно свойство Spring.datasource.typespring.datasource.type = com.alibaba.druid.pool.druiddatasource #configuration officum######## swies,# moviemum## swies,# moster-size. Spring.datasource.initialSize = 5 Spring.Datasource.minidle = 5 Spring.Datasource.Maxactive = 20 # Настройка времени, чтобы получить время ожидания подключения Spring.datasource.maxwait = 60000 # Настройте, как долго для выполнения интервала обнаружения, чтобы обнаружить непрерывные соединения, которые необходимо закрыть. spring.datasource.timeBeneEvictionRunSmillis = 60000 # Настройте минимальное время для соединения для выживания в бассейне, единица - Milliseconds Spring.datasource.minevictableIdleTimeMillis = 300000 Spring.Datasource.validationQuery = Select 1 From Spring.DataSource.TestweleD spring.datasource.testonborrow = false spring.datasource.testonreturn = false # open pscache и укажите размер pscache на каждом соединении spring.datasource.poolpreparedStatements = True Spring.datasource.maxpoolprepareDatementPercementectionsize = 20 # Конфигурирование Filepers для контроля. После удаления его нельзя подсчитать интерфейс мониторинга. «Стена» используется для брандмауэра Spring.datasource.filters = stat, Wall, log4j# Используйте свойство ConnectProperties, чтобы открыть функцию MergesQL; Медленные записи SQL
Затем добавьте DruidConfig в проект и кратко объясните, что этот файл конфигурации в основном загружает конфигурацию Application.properties, а код выглядит следующим образом:
пакет 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.spramework.context.annotation.bean; org.springframework.context.annotation.configuration; import org.springframework.context.annotation.primary; import com.alibaba.druid.pool.druiddatasource;/** * @author dalaoyang * @description * @project springboot_learn * @pauthor com.colayangeang. [email protected] * @date 2018/4/12 */@configurationpublic class druidconfig {private logger logger = logger.getlogger (this.getClass ()); @Value ("$ {spring.datasource.url}") частная строка dburl; @Value ("$ {Spring.datasource.username}") частная строка; @Value ("$ {spring.datasource.password}") Private String Password; @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.TimeWeeWeedEvictionRunsmillis}") private int timeBowneEvictionRunsmillis; @Value ("$ {Spring.Datasource.mineVictableIdletImeMillis}") private int mineVictableIdletimemillis; @Value ("$ {spring.datasource.validationQuery}") Private String ValidationQuery; @Value ("$ {Spring.Datasource.testWhileIdle}") private Boolean TestWhileIdle; @Value ("$ {Spring.Datasource.testonBorw}") Private Boolean TestonBorrow; @Value ("$ {spring.datasource.testonreturn}") private boolean testonreturn; @Value ("$ {Spring.datasource.poolpreparedStatements}") частные логические бассейны; @Value ("$ {Spring.Datasource.maxpoolpReparedStatementPerconcection}") private int maxpoolpreparedStatementPerconcectionize; @Value ("$ {spring.datasource.filters}") частные строковые фильтры; @Value ("{spring.datasource.connectionProperties}") private String ConnectionProperties; @Bean @primary // Основной источник данных public DataSource DataSource () {druiddatasource dataSource = new DruidDataSource (); dataSource.seturl (this.dburl); dataSource.setuserName (имя пользователя); dataSource.setPassword (пароль); dataSource.setDriverClassName (DriverClassName); // configuration dataSource.setInitialSize (инициализация); dataSource.setMinidle (minidle); dataSource.setMactactive (maxactive); dataSource.setMaxWait (maxwait); dataSource.setTimeBetweeEvictionRunsmillis (TimeBhingWeeVictionRunsmillis); dataSource.SetMineVictableIdletimemillis (mineVictableIdletimemillis); dataSource.setValidationQuery (valyationQuery); dataSource.SetTestWhileIdle (тест -WhileIdle); dataSource.setTestonBorrow (testonBorrow); dataSource.setTestonReturn (testonReturn); dataSource.SetPoolPReparedStatements (PoolPRearedStatements); dataSource.SetMaxPoolPReparEdStateMentPerConnectionsize (maxpoolpreparedStatementPerconnectionsize); try {dataSource.setFilters (Filters); } catch (sqlexception e) {logger.error ("Исключение конфигурации друида", e); } dataSource.setConnectionProperties (ConnectionProperties); вернуть DataSource; }}
Затем создайте друидфильтер, код выглядит следующим образом:
Пакет com.dalaoyang.filter; import javax.servlet.annotation.webfilter; import javax.servlet.annotation.webinitParam; импорт com.alibaba.druid.support.http.webstatfilter;/** * @author dalaoyang * @description * @problefilter;/** * @author dalaoyang * @description. com.dalaoyang.filter * @email [email protected] * @date 2018/4/12 */ @webfilter (faltername = "druidwebstatfilter", urlpatterns = "/ *", initparams = { @WebinitParam (name = "Исключения", value = "*. JS,*. GIF,*. JPG,*. BMP,*. PNG,*. CSS,*. ICO,/DRUID/*") // Игнорировать ресурсы}) Public Class Druidfilter extends webstatfilter {})
Создайте новый Druidservlet, добавьте аннотацию в класс @webservlet, который настраивает пароль учетной записи для входа на страницу мониторинга Druid, конфигурации Whitelist и Blacklist, этот код заключается в следующем:
Пакет com.dalaoyang.servlet; импорт javax.servlet.annotation.webinitParam; импорт javax.servlet.annotation.webservlet; импорт com.alibaba.druid.support.http.statviewservlet;/** * @author dalaoyang * @description * @pruple com.dalaoyang.servlet * @email [email protected] * @date 2018/4/12 */ @webservlet (urlpathterns = "/druid/ *", initparams = {@webinitparal (имя = "разрешение", value = ""), // ip Whitelist (не настройка или пустое, что допускается). @Webinitparam (name = "deny", value = ""), // ip blacklist (deny имеет приоритет Alling) @webinitparam (name = "loginusername", value = "admin"), // Войдите на страницу управления DrUID asmername @webinitparam (name = "publicard valuess =" addrin Druidservlet Extends statViewServlet {}
Затем добавьте аннотацию @servletcomponentscan в класс стартапа и позвольте проекту сканировать до сервлета. Код заключается в следующем:
Пакет com.dalaoyang; импорт org.springframework.boot.springapplication; импорт org.springframework.boot.autoconfigure.springbootapplication; импорт org.springframework.boot.web.servlet.servletcomponnentscancan Аннотация, в противном случае его нельзя отсканировать до сервиса@servletcomponentscan public class springbootdruidapplication {public static void main (string [] args) {SpringApplication.run (SpringBootDruidApplication.class, args); }}Остальные представляют собой одну и ту же сущность (класс объектов), репозиторий (работа операции данных), контроллер (контроллер, используемый для тестирования) в качестве интегрированного JPA, который непосредственно отображает код.
Город
Пакет com.dalaoyang.entity; import javax.persistence. *;/** * @author dalaoyang * @description * @project springboot_learn * @package com.dalaoyang.entity * @email [email protected] * @date 2018/7 */ @ @at at at @table @name = name = ") @GeneratedValue (стратегия = GenerationType.Auto) Private Int CityID; частная строка CityName; частная струна CityIntroduce; Общественный город (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
пакет com.dalaoyang.repository; import com.dalaoyang.entity.city; import org.springframework.data.jpa.repository.jparepository;/** * @author dalaoyang * @description * @project springboot_learn * @package com.dalaoyang.repositor * @project_learn * @package * [email protected] * @date 2018/4/7 */Общественный интерфейс CityRepository расширяет jParePository <City, Integer> {}
CityController
пакет com.dalaoyang.controller; import com.dalaoyang.entity.city; import com.dalaoyang.repository.cityrepository; import org.springframework.beans.factory.annotation.autowired; import org.spramework.web.bindation.antation.gretmapping; org.springframework.web.bind.annotation.RestController;/** * @author dalaoyang * @Description * @project springboot_learn * @package com.dalaoyang.controller * @email [email protected] * @date 2018/4/7 */@RestControllerpublic class CityController { @Autowired Private CityRepository CityRepository; // http: // localhost: 8888/savecity? CityName = pecijing & cityIntroduce = столица Китая @GetMapping (value = "savecity") Общедоступная строка Savecity (String CityName, String CityIntroduce) {City City = New City (CityName, CityIntroduce); CityRepository.save (город); вернуть "успех"; } // http: // localhost: 8888/deletecity? CityId = 2 @GetMapping (value = "deleteCity") public String deleteteCity (int cityId) {cityRepository.delete (cityId); вернуть "успех"; } // http: // localhost: 8888/updatecity? CityId = 3 & CityName = Shenyang & CityIntroduce = Liaoning Provincial Столица @getmapping (value = "updateCity") общедоступная updateCity (int CityId, String CityName, String CityIntroduce) {City City CityRODUCE); CityRepository.save (город); вернуть "успех"; } // http: // localhost: 8888/getcitybyid? CityId = 3 @getMapping (value = "getCityByid") Public City GetCityById (int CityId) {CityRepository.findone (CityId); возвратный город; }}
Затем запустите проект, и вы увидите, что консоль создала городской стол.
Затем посетите http: // localhost: 8888/druid, и вы можете увидеть следующее рисунок:
Введите администратор пароля учетной записи, администратор, как показано на рисунке ниже
Тогда в это время мы сможем посетить http: // localhost: 8888/savecity? CityName = pecijing & cityIntroduce = столица Китая
Затем нажмите на мониторинг SQL выше, как показано на рисунке ниже.
Из приведенного выше рисунка вы можете видеть, что только что запустил таблицу создания проекта. Интеграция была завершена здесь.
Скачать исходный код: https://gitee.com/dalaoyang/springboot_learn
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.