Spring Boot2.1.9: Druid data source integration and monitoring

Disclaimer: This article is a blogger original article, follow the CC 4.0 BY-SA copyright agreement, reproduced, please attach the original source link and this statement.
This link: https://blog.csdn.net/lhh143400/article/details/102761523

 

1.pom.xml
<!-- 阿里数据连接池 -->
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid-spring-boot-starter</artifactId>
   <version>1.1.20</version>
</dependency>
<!-- MySql -->
    <dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.47</version>
</dependency>

<!-- Oracle -->
<dependency>
   <groupId>com.oracle</groupId>
   <artifactId>ojdbc6</artifactId>
   <version>11.2.0.3</version>
</dependency>
<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <optional>true</optional>
</dependency>

2.application.properties

Data source configuration #MySql

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.name=druidDataSource

spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/mango?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver

Data source configuration #Oracle

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.name=druidDataSource
spring.datasource.druid.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.druid.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.datasource.druid.username=news
spring.datasource.druid.password=news_1

# Monitoring Configuration

# Initial size 
spring.datasource.druid.initial. 1-size = 
# minimum number of connections 
spring.datasource.druid.min-IDLE. 1 = 
# max connections 
spring.datasource.druid.max-Active = 20 is 
# connection configuration acquisition wait timeout time 
spring.datasource.druid.max = the wait-60000 
# intervals the frequency of such detection, an idle connection is detected to be closed, in milliseconds 
spring.datasource.druid.time-BETWEEN--eviction-the runs of millis = 60000 
# a connector disposed in the survival time of the minimum pool milliseconds 
spring.datasource.druid.min-evictable-IDLE-time-of millis = 300000 
spring.datasource.druid.validation the SELECT. 1 = the FROM-Query the DUAL 
spring.datasource.druid IDLE = the while--.test to true 
spring.datasource.druid.test to false-oN-BORROW = 
spring.datasource.druid.test oN-return-to false = 
# open PSCache, and specifies the size of each connection PSCache
= statements-the Prepared-spring.datasource.druid.pool 50
-the pool-the Prepared-spring.datasource.druid.max of Statement-per-Connection-size = 20 
# Configure monitoring statistics intercepted Filters , after removing the monitoring interface sql not statistics, 'wall' for firewall 
spring.datasource.druid. Filters = stat, wall, config

# New File DruidConfig, DruidDataSourcePropertiesConfig

1) the data source and configured to monitor properties of the above monitoring relevant configuration DruidDataSourcePropertiesConfig
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * 数据源监控属性  配置
 *
 * @author lhh
 * @Date 2019/10/26 22:03
 */
@ConfigurationProperties(prefix = "spring.datasource.druid")
@Data
public class DruidDataSourcePropertiesConfig {

    private String driverClassName;
    private String url;
    private String username;
    private String password;
    private int initialSize;
    private int minIdle;
    private int maxActive;
    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;
    private String filters;
}

2) injection properties and configuration connection pool  DruidConfig

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.Servlet;
import javax.sql.DataSource;
java.sql.SQLException Import; 

/ ** 
 * Data source Servlet and configuration monitoring the Filter 
 * is injected into the main attributes and configure the connection pool of black and white lists, monitoring and management background account password and other configuration 
 * 
 * visit: http: // localhost: 8080 / druid /login.html 
 * 
 * @author LHH 
 * @date 2019/10/26 22:43 
 * / 
@Configuration 
@EnableConfigurationProperties (DruidDataSourcePropertiesConfig.class {}) 
public class DruidConfig { 

    @Autowired 
    Private DruidDataSourcePropertiesConfig Properties; 

    @Bean 
    @ConditionalOnMissingBean 
    public DruidDataSource the DataSource () { 
        DruidDataSource DruidDataSource new 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信息, 配置监控视图
     * 相当于Web Servlet配置
     * 
     * @Return 
     * / 
    @Bean
    @ConditionalOnMissingBean
    public ServletRegistrationBean <the Servlet> druidServlet () { 
        ServletRegistrationBean <the Servlet> servletRegistrationBean new new ServletRegistrationBean = <the Servlet> (new new StatViewServlet (), "/ Druid / *"); 

        // whitelist: 
        servletRegistrationBean.addInitParameter ( " the allow "," 127.0.0.1 "); 
        // IP blacklist when common (existence, deny priority to allow): If you deny, then meets the presentation: Sorry, you are not permitted to the this Page View. 
        servletRegistrationBean.addInitParameter (" deny " , ""); 
        // login password to view account information, log on Druid for monitoring background 
        servletRegistrationBean.addInitParameter ( "loginUsername", "ADMIN"); 
        servletRegistrationBean.addInitParameter ( "loginPassword", "ADMIN"); 
        // whether to reset the data.
        servletRegistrationBean.addInitParameter("resetEnable", "true");
        servletRegistrationBean return; 

    } 


    / ** 
     * Filter registration information to monitor the interceptor 
     * Equivalent Web Filter Configuration 
     * 
     * @return 
     * / 
    @Bean 
    @ConditionalOnMissingBean 
    public FilterRegistrationBean filterRegistrationBean () { 
        FilterRegistrationBean filterRegistrationBean new new FilterRegistrationBean = (); 
        filterRegistrationBean.setFilter (new new WebStatFilter ()); 
        filterRegistrationBean.addUrlPatterns ( "/ *"); 
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean; 
    } 

}

View Monitor view

Start the application, visit:  HTTP: // localhost: 8080 / Druid / login.html , enter Druid monitor background page.

Problems encountered

Caused by: java.lang.IllegalStateException: dbType not support: null, url null // illegal statements abnormal

   Originally filled:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mango?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

After modification did not report this wrong:

spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/mango?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver

分析为什么:debug 测试 是因为 DruidDataSource 注入属性url,username,password,driver-class-name为空导致的问题。

 

更多资料参考:

Druid: https://github.com/alibaba/druid

监控配置 Druid Spring Starter: https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

官方文档 https://github.com/alibaba/druid/wiki

其它人博客:https://www.cnblogs.com/niejunlei/p/5977895.html

Guess you like

Origin blog.csdn.net/lhh143400/article/details/102761523