• 9. SpringBoot整合Druid


    SpringBoot整合Druid

    1. 依赖

      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid-spring-boot-starter</artifactId>
          <version>1.2.2</version>
      </dependency>
      
    2. 配置文件 & 属性类 & 配置类

    # 数据源
    spring:
      datasource:
        # 名称
        name: druidDataSource
        # 数据源类型
        type: com.alibaba.druid.pool.DruidDataSource
        druid:
         # 驱动
         driver-class-name: com.mysql.cj.jdbc.Driver
         # 路径
         url: jdbc:mysql://localhost:3306/demo?useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
         # 用户名
         username: root
         # 密码
         password: mysql
         filters: stat,wall
         #      filters: stat,wall,log4j,config
         #连接池配置
         max-active: 100
         initial-size: 1
         max-wait: 60000
         min-idle: 1
         time-between-eviction-runs-millis: 60000
         min-evictable-idle-time-millis: 300000
         validation-query: select 'x'
         test-while-idle: true
         test-on-borrow: false
         test-on-return: false
         pool-prepared-statements: true
         max-open-prepared-statements: 50
         max-pool-prepared-statement-per-connection-size: 20
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    
    /**
     * 数据源属性
     */
    @ConfigurationProperties(prefix = "spring.datasource.druid")
    public class DruidDataSourceProperties {
    
       // jdbc
       private String driverClassName;
       private String url;
       private String username;
       private String password;
       // jdbc connection pool
       private int initialSize;
       private int minIdle;
       private int maxActive = 100;
       private long maxWait;
       private long timeBetweenEvictionRunsMillis;
       private long minEvictableIdleTimeMillis;
       private String validationQuery;
       private boolean testWhileIdle;
       private boolean testOnBorrow;
       private boolean testOnReturn;
       private boolean poolPreparedStatements;
       private int maxPoolPreparedStatementPerConnectionSize;
       // filter
       private String filters;
    
       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 long getMaxWait() {
          return maxWait;
       }
    
       public void setMaxWait(long maxWait) {
          this.maxWait = maxWait;
       }
    
       public long getTimeBetweenEvictionRunsMillis() {
          return timeBetweenEvictionRunsMillis;
       }
    
       public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis) {
          this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
       }
    
       public long getMinEvictableIdleTimeMillis() {
          return minEvictableIdleTimeMillis;
       }
    
       public void setMinEvictableIdleTimeMillis(long 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 getDriverClassName() {
          return driverClassName;
       }
    
       public void setDriverClassName(String driverClassName) {
          this.driverClassName = driverClassName;
       }
    
       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;
       }
    
    }
    
    import com.alibaba.druid.pool.DruidDataSource;
    import com.alibaba.druid.support.http.StatViewServlet;
    import com.alibaba.druid.support.http.WebStatFilter;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    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 javax.servlet.Filter;
    import javax.servlet.Servlet;
    import javax.sql.DataSource;
    import java.sql.SQLException;
    
    /**
     * Druid数据源配置
     */
    @Configuration
    @EnableConfigurationProperties({DruidDataSourceProperties.class})
    public class DruidConfig {
        @Autowired
        private DruidDataSourceProperties properties;
    
        @Bean
        @ConditionalOnMissingBean
        public DataSource druidDataSource() {
            DruidDataSource druidDataSource = new DruidDataSource();
            druidDataSource.setDriverClassName(properties.getDriverClassName());
            druidDataSource.setUrl(properties.getUrl());
            druidDataSource.setUsername(properties.getUsername());
            druidDataSource.setPassword(properties.getPassword());
            druidDataSource.setInitialSize(properties.getInitialSize());
            druidDataSource.setMinIdle(properties.getMinIdle());
            druidDataSource.setMaxActive(properties.getMaxActive());
            druidDataSource.setMaxWait(properties.getMaxWait());
            druidDataSource.setTimeBetweenEvictionRunsMillis(properties.getTimeBetweenEvictionRunsMillis());
            druidDataSource.setMinEvictableIdleTimeMillis(properties.getMinEvictableIdleTimeMillis());
            druidDataSource.setValidationQuery(properties.getValidationQuery());
            druidDataSource.setTestWhileIdle(properties.isTestWhileIdle());
            druidDataSource.setTestOnBorrow(properties.isTestOnBorrow());
            druidDataSource.setTestOnReturn(properties.isTestOnReturn());
            druidDataSource.setPoolPreparedStatements(properties.isPoolPreparedStatements());
            druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(properties.getMaxPoolPreparedStatementPerConnectionSize());
    
            try {
                druidDataSource.setFilters(properties.getFilters());
                druidDataSource.init();
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
            return druidDataSource;
        }
    
        /**
         * 注册Servlet信息, 配置监控视图
         *
         * @return
         */
        @Bean
        @ConditionalOnMissingBean
        public ServletRegistrationBean<Servlet> druidServlet() {
            ServletRegistrationBean<Servlet> servletRegistrationBean = new ServletRegistrationBean<Servlet>(new StatViewServlet(), "/druid/*");
    
            //白名单:
    //        servletRegistrationBean.addInitParameter("allow","127.0.0.1,139.196.87.48");
            //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.
            servletRegistrationBean.addInitParameter("deny","192.168.1.119");
            //登录查看信息的账号密码, 用于登录Druid监控后台
            servletRegistrationBean.addInitParameter("loginUsername", "admin");
            servletRegistrationBean.addInitParameter("loginPassword", "admin");
            //是否能够重置数据.
            servletRegistrationBean.addInitParameter("resetEnable", "true");
            return servletRegistrationBean;
    
        }
    
        /**
         * 注册Filter信息, 监控拦截器
         *
         * @return
         */
        @Bean
        @ConditionalOnMissingBean
        public FilterRegistrationBean<Filter> filterRegistrationBean() {
            FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<Filter>();
            filterRegistrationBean.setFilter(new WebStatFilter());
            filterRegistrationBean.addUrlPatterns("/*");
            filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
            return filterRegistrationBean;
        }
    }
    
    1. Druid监控

      http://localhost:8080/druid/login.html

  • 相关阅读:
    android 手把手教您自定义ViewGroup(一)
    mac下tomcat的安装与配置
    jarsigner签名报错Invalid keystore format
    android上引入七牛 上传图片或者文件 最终整理版本(可用)
    viewpage listview gridview加载本地大图多图OOM处理办法
    android TextView 文字垂直的设置
    javascript技巧之实现add方法无限调用
    jQuery源码分析之ready方法
    jQuery源码分析之Callbacks方法
    jQuery源码分析之extend方法
  • 原文地址:https://www.cnblogs.com/forelim/p/15395123.html
Copyright © 2020-2023  润新知