Spring-boot整合Druid数据源


第一部分:数据源的集中比较。

目前常用的数据源主要有c3p0、dbcp、proxool、druid,先来说说他们
Spring 推荐使用dbcp;
Hibernate 推荐使用c3p0和proxool
1、 DBCP:apache
DBCP(DataBase connection pool)数据库连接池。是apache上的一个 java连接池项目,也是 tomcat使用的连接池组件。单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。dbcp没有自动的去回收空闲连接的功能。

2、 C3P0:
C3P0是一个开源的jdbc连接池,它实现了数据源和jndi绑定,支持jdbc3规范和jdbc2的标准扩展。c3p0是异步操作的,缓慢的jdbc操作通过帮助进程完成。扩展这些操作可以有效的提升性能。目前使用它的开源项目有Hibernate,Spring等。c3p0有自动回收空闲连接功能。

3、 Proxool:Sourceforge
Proxool是一种Java数据库连接池技术。是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。
综合来说,稳定性是dbcp>=c3p0>proxool

后来阿里巴巴的druid开源了,可以是前无古人后无来者,最强没有之一,是否的稳定,在大并发中表现十分好

今天来介绍的主要是监控,德鲁伊提供的这个监控组件,非常的便利,截图如下:

这是针对所有sql的监控,运行效率等等都能看到




1.maven 依赖

<!-- druid 数据源 -->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid</artifactId>
   <version>1.1.9</version>
</dependency>
<!-- Mysql链接 -->
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <!--<version>6.0.6</version>-->
</dependency>

    2.配置Durid数据文件

# 数据库配置 <!-- 阿里 druid数据库连接池 -->
spring.datasource.driverClassName= com.mysql.jdbc.Driver
spring.datasource.url= jdbc:mysql://localhost:3306/test_springboot?useUnicode=true&character
spring.datasource.username= root
spring.datasource.password= root

#-------------------------
# 下面为连接池的补充设置,应用到上面所有数据源中
# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=1
spring.datasource.maxActive=50

# 配置获取连接等待超时的时间
spring.datasource.maxWait=60000

# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000

# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false

# 打开PSCache,并且指定每个连接上PSCache的大小
#如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。分库分表较多的数据库,建议配置为false。
spring.datasource.poolPreparedStatements= false
#spring.datasource.maxPoolPreparedStatementPerConnectionSize=20


# 连接泄漏处理。Druid提供了RemoveAbandanded相关配置,用来关闭长时间不使用的连接(例如忘记关闭连接)。 -->
#spring.datasource.removeAbandoned = true
# 1800秒,也就是30分钟
#spring.datasource.removeAbandonedTimeout= 1800
#  <!-- 关闭abanded连接时输出错误日志 -->
#spring.datasource.logAbandoned= true

# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j

# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

# 合并多个DruidDataSource的监控数据
#spring.datasource.useGlobalDataSourceStat=true

application.yml的配置

# RabbitMQ是MQ的一种, MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。
#    MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。
  rabbitmq:
    host: 127.0.0.1
    port: 5672
#    username: admin
#    password:admin
#    virtual-host: /vhost_test
#    publisher-confirms: true
## 轮询分发模式需要加下面的配置
#    listener:
#      simple:
#        prefetch: 0
3.配置类
 
 
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
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 org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;


/**
 * @author gaojme
 * @ClassName DruidConfiguration
 * 类描述: SpringBoot使用Druid数据源的配置类
 * @create 2018-06-13 14:23
 * 备注:写这段代码的时候,只有上帝和我知道它是干嘛的。现在,只有上帝知道。
 **/
@Configuration
@PropertySource(value = "classpath:druid.properties")
public class DruidConfiguration {

    private static final Logger logger = LoggerFactory.getLogger(DruidConfiguration.class);


    @Bean
    public ServletRegistrationBean druidServlet() {
        logger.info("init Druid Servlet Configuration ");
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
        servletRegistrationBean.setServlet(new StatViewServlet());
        servletRegistrationBean.addUrlMappings("/druid/*");
        Map<String, String> initParameters = new HashMap<String, String>();
        initParameters.put("loginUsername", "admin");// 用户名
        initParameters.put("loginPassword", "admin");// 密码
        initParameters.put("resetEnable", "false");// 禁用HTML页面上的“Reset All”功能
        initParameters.put("allow", ""); // IP白名单 (没有配置或者为空,则允许所有访问)
        // initParameters.put("deny", "192.168.20.38");// IP黑名单
        // (存在共同时,deny优先于allow)
        servletRegistrationBean.setInitParameters(initParameters);
        return servletRegistrationBean;
    }

    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new WebStatFilter());

        // 添加过滤规则
        filterRegistrationBean.addUrlPatterns("/*");

        // 添加不需要忽略的格式信息.
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }



}

 
 


直接访问:http://localhost:8080/springboot/druid/websession.html


转自:https://blog.csdn.net/saytime/article/details/78963121

转自:https://blog.csdn.net/yanguo110/article/details/68944659

猜你喜欢

转载自blog.csdn.net/qq_33146717/article/details/80689810