SpringBoot 개발 사례 의 설정 Druid 데이터베이스 연결 탱크 의 예제

12901 단어 SpringBootDruid
머리말
스프링 부츠 시 리 즈 를 오랫동안 업데이트 하지 않 았 는데 바쁘다 고요?또한 얼마 전의 관심 사 는 다른 측면 에 있 을 수도 있 습 니 다.최근 프로젝트 에서 애플 리 케 이 션 을 개발 해 야 합 니 다.마침 Spring Boot 를 이용 하여 백 엔 드 서 비 스 를 실현 하고 그 다음 에 관련 코드 사례 를 공유 합 니 다.여러분 이 애플 리 케 이 션 백 엔 드 서 비 스 를 할 때 안개 가 끼 지 않 습 니 다.
Spring Boot 에서 기본적으로 사용 가능 한 연결 풀(dbcp,dbcp 2,tomcat,hikari)을 제공 합 니 다.물론 Druid 는 지원 되 지 않 습 니 다.Druid 는 아 리 계 의 오픈 소스 연결 풀 에서 왔 습 니 다.아주 우수한 모니터링 기능 을 제공 합 니 다.Spring Boot 와 어떻게 통합 하 는 지 알려 드 리 겠 습 니 다.
버 전 환경
Spring Boot 1.5.2.RELEASE、Druid 1.1.6、JDK1.7
시스템 통합
pom.xml 의존 도 추가:

<!-- Jpa -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySql -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid -->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid</artifactId>
  <version>1.1.6</version>
</dependency>
application.properties 설정:

#   
spring.datasource.url=jdbc:mysql://192.168.1.66:3306/spring_boot?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#      ,  ,  
spring.datasource.initialSize=1
spring.datasource.minIdle=3
spring.datasource.maxActive=20
#              
spring.datasource.maxWait=60000
#              ,           ,     
spring.datasource.timeBetweenEvictionRunsMillis=60000
#                 ,     
spring.datasource.minEvictableIdleTimeMillis=30000
spring.datasource.validationQuery=select 'x'
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
#   PSCache,         PSCache   
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
#          filters,       sql    ,'wall'     
spring.datasource.filters=stat,wall,slf4j
#   connectProperties     mergeSql  ; SQL  
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
yml 파일 설정(위 와 1 선택)

spring:
 datasource:
   url: jdbc:mysql://192.168.1.66:3306/spring-boot?useUnicode=true&characterEncoding=utf-8&useSSL=false
   username: root
   password: root
   driver-class-name: com.mysql.jdbc.Driver
   platform: mysql
   type: com.alibaba.druid.pool.DruidDataSource
   #            ,           
   #      ,  ,  
   initialSize: 1
   minIdle: 3
   maxActive: 20
   #              
   maxWait: 60000
   #              ,           ,     
   timeBetweenEvictionRunsMillis: 60000
   #                 ,     
   minEvictableIdleTimeMillis: 30000
   validationQuery: select 'x'
   testWhileIdle: true
   testOnBorrow: false
   testOnReturn: false
   #   PSCache,         PSCache   
   poolPreparedStatements: true
   maxPoolPreparedStatementPerConnectionSize: 20
   #          filters,       sql    ,'wall'     
   filters: stat,wall,slf4j
   #   connectProperties     mergeSql  ; SQL  
   connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
Druid 모니터링 통계 기능 설정

import java.sql.SQLException;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
/**
 *          Druid   
 *      
 *       2018 3 15 
 */
@Configuration
public class DruidConfiguration {
  private static final Logger logger = LoggerFactory.getLogger(DruidConfiguration.class);
  private static final String DB_PREFIX = "spring.datasource";
  @Bean
  public ServletRegistrationBean druidServlet() {
    logger.info("init Druid Servlet Configuration ");
    ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
    // IP    (        ,       )
    servletRegistrationBean.addInitParameter("allow", "");
    // IP   (     ,deny   allow)
    //servletRegistrationBean.addInitParameter("deny", "192.168.1.100");
    //       
    servletRegistrationBean.addInitParameter("loginUsername", "admin");
    servletRegistrationBean.addInitParameter("loginPassword", "admin");
    //           HTML    “Reset All”  
    servletRegistrationBean.addInitParameter("resetEnable", "false");
    return servletRegistrationBean;
  }
  @Bean
  public FilterRegistrationBean filterRegistrationBean() {
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
    filterRegistrationBean.addUrlPatterns("/*");
    filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
    return filterRegistrationBean;
  }
  @ConfigurationProperties(prefix = DB_PREFIX)
  class IDataSourceProperties {
    private String url;
    private String username;
    private String password;
    private String driverClassName;
    private int initialSize;
    private int minIdle;
    private int maxActive;
    private int maxWait;
    private int timeBetweenEvictionRunsMillis;
    private int minEvictableIdleTimeMillis;
    private String validationQuery;
    private boolean testWhileIdle;
    private boolean testOnBorrow;
    private boolean testOnReturn;
    private boolean poolPreparedStatements;
    private int maxPoolPreparedStatementPerConnectionSize;
    private String filters;
    private String connectionProperties;
    @Bean 
    public DataSource dataSource() {
      DruidDataSource datasource = new DruidDataSource();
      datasource.setUrl(url);
      datasource.setUsername(username);
      datasource.setPassword(password);
      datasource.setDriverClassName(driverClassName);
      //configuration
      datasource.setInitialSize(initialSize);
      datasource.setMinIdle(minIdle);
      datasource.setMaxActive(maxActive);
      datasource.setMaxWait(maxWait);
      datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
      datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
      datasource.setValidationQuery(validationQuery);
      datasource.setTestWhileIdle(testWhileIdle);
      datasource.setTestOnBorrow(testOnBorrow);
      datasource.setTestOnReturn(testOnReturn);
      datasource.setPoolPreparedStatements(poolPreparedStatements);
      datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
      try {
        datasource.setFilters(filters);
      } catch (SQLException e) {
        System.err.println("druid configuration initialization filter: " + e);
      }
      datasource.setConnectionProperties(connectionProperties);
      return datasource;
    }
    public String getUrl() {
      return url;
    }
    public void setUrl(String url) {
      this.url = url;
    }
    public String getUsername() {
      return username;
    }
    public void setUsername(String username) {
      this.username = username;
    }
    public String getPassword() {
      return password;
    }
    public void setPassword(String password) {
      this.password = password;
    }
    public String getDriverClassName() {
      return driverClassName;
    }
    public void setDriverClassName(String driverClassName) {
      this.driverClassName = driverClassName;
    }
    public int getInitialSize() {
      return initialSize;
    }
    public void setInitialSize(int initialSize) {
      this.initialSize = initialSize;
    }
    public int getMinIdle() {
      return minIdle;
    }
    public void setMinIdle(int minIdle) {
      this.minIdle = minIdle;
    }
    public int getMaxActive() {
      return maxActive;
    }
    public void setMaxActive(int maxActive) {
      this.maxActive = maxActive;
    }
    public int getMaxWait() {
      return maxWait;
    }
    public void setMaxWait(int maxWait) {
      this.maxWait = maxWait;
    }
    public int getTimeBetweenEvictionRunsMillis() {
      return timeBetweenEvictionRunsMillis;
    }
    public void setTimeBetweenEvictionRunsMillis(int timeBetweenEvictionRunsMillis) {
      this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
    }
    public int getMinEvictableIdleTimeMillis() {
      return minEvictableIdleTimeMillis;
    }
    public void setMinEvictableIdleTimeMillis(int minEvictableIdleTimeMillis) {
      this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
    }
    public String getValidationQuery() {
      return validationQuery;
    }
    public void setValidationQuery(String validationQuery) {
      this.validationQuery = validationQuery;
    }
    public boolean isTestWhileIdle() {
      return testWhileIdle;
    }
    public void setTestWhileIdle(boolean testWhileIdle) {
      this.testWhileIdle = testWhileIdle;
    }
    public boolean isTestOnBorrow() {
      return testOnBorrow;
    }
    public void setTestOnBorrow(boolean testOnBorrow) {
      this.testOnBorrow = testOnBorrow;
    }
    public boolean isTestOnReturn() {
      return testOnReturn;
    }
    public void setTestOnReturn(boolean testOnReturn) {
      this.testOnReturn = testOnReturn;
    }
    public boolean isPoolPreparedStatements() {
      return poolPreparedStatements;
    }
    public void setPoolPreparedStatements(boolean poolPreparedStatements) {
      this.poolPreparedStatements = poolPreparedStatements;
    }
    public int getMaxPoolPreparedStatementPerConnectionSize() {
      return maxPoolPreparedStatementPerConnectionSize;
    }
    public void setMaxPoolPreparedStatementPerConnectionSize(int maxPoolPreparedStatementPerConnectionSize) {
      this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;
    }
    public String getFilters() {
      return filters;
    }
    public void setFilters(String filters) {
      this.filters = filters;
    }
    public String getConnectionProperties() {
      return connectionProperties;
    }
    public void setConnectionProperties(String connectionProperties) {
      this.connectionProperties = connectionProperties;
    }
  }
}
시작 응용 프로그램,접근 주소:http://localhost:8080/druid/설정 한 계 정 비밀 번 호 를 입력 하고 로그 인 하면 데이터 원본 및 SQL 통계 등 모니터링 을 볼 수 있 습 니 다.효과 도 는 다음 과 같다.

물론 알 리 바 바 는 Druid 의 SpringBoot 통합 판(druid-spring-boot-starter)을 제공 해 다음 링크 를 참고 할 수 있다.
참고:
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
https://github.com/alibaba/druid/wiki
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기