数据库阿里连接池 druid配置详解

数据库阿里连接池 druid 配置详解

什么是 druid

Druid 是阿里巴巴开源的一个数据库连接池、监控组件。 druid中维护了一个数据库连接池,并提供了一些监控统计和扩展功能。

Druid提供的功能:

  • 数据库连接池
  • 监控统计
  • 扩展JDBC
  • SQL注入检查:wall filter
  • 大数据量低延时:PSCache
  • 干扰SQL执行: stat filter
  • 统计SQL性能

如何配置druid连接池

在maven中引入以下依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.6</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

application.properties中添加以下配置:

# 数据库主从配置
spring.datasource.url = jdbc:mysql://ip:port/dbName?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true
spring.datasource.username = username
spring.datasource.password = password

# druid连接池配置
spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name = com.mysql.jdbc.Driver
spring.datasource.filters = stat, wall, logback
spring.datasource.max-active = 20
spring.datasource.initial-size = 1
spring.datasource.min-idle = 3
spring.datasource.max-wait = 60000
spring.datasource.validation-query = SELECT 1
spring.datasource.test-while-idle = true
spring.datasource.test-on-borrow = false
spring.datasource.test-on-return = false
spring.datasource.time-between-eviction-runs-millis = 60000
spring.datasource.min-evictable-idle-time-millis = 300000
spring.datasource.log-abandoned = true
spring.datasource.remove-abandoned = true
spring.datasource.remove-abandoned-timeout-millis = 1800000
spring.datasource.pool-prepared-statements = true
spring.datasource.max-pool-prepared-statement-per-connection-size = 20

参数解释

  • spring.datasource.url: 数据库连接url
  • spring.datasource.username: 数据库连接用户名
  • spring.datasource.password: 数据库连接密码
  • spring.datasource.type: 连接池类型为druid
  • spring.datasource.driver-class-name: 数据库驱动类名
  • spring.datasource.filters: 连接池所用多种过滤器
  • spring.datasource.max-active: 连接池最大连接数
  • spring.datasource.initial-size: 连接池初始连接数
  • spring.datasource.min-idle: 连接池最小闲置连接数
  • spring.datasource.max-wait: 连接池最大等待时长
  • spring.datasource.validation-query: 连接验证的sql语句
  • spring.datasource.test-while-idle: 是否开启空闲检查
  • spring.datasource.test-on-borrow: 是否开启连接获取时检查
  • spring.datasource.test-on-return: 是否开启连接返回时检查
  • spring.datasource.time-between-eviction-runs-millis: 空闲检测周期
  • spring.datasource.min-evictable-idle-time-millis: 最小空闲时间
  • spring.datasource.log-abandoned: 是否打印连接泄露日志
  • spring.datasource.remove-abandoned: 是否自动回收超过最大闲置时间的连接
  • spring.datasource.remove-abandoned-timeout-millis: 超时时间由检测自动回收功能
  • spring.datasource.pool-prepared-statements: 是否缓存prepared statements
  • spring.datasource.max-pool-prepared-statement-per-connection-size: 单个连接最大缓存prepare statement数量

示例

第一条示例

@Service
public class UserService {

    @Autowired
    private UserDao userDao;

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Autowired
    private DataSource dataSource;

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

    /**
     * 添加用户
     */
    public void addUser(String name, Integer age) {
        userDao.addUser(name, age);
    }

    /**
     * JdbcTemplate操作数据库
     */
    public void addUserByJdbcTemplate(String name, Integer age) {
        String sql = "INSERT INTO user(name, age) VALUES(?,?)";
        try {
            jdbcTemplate.update(sql, name, age);
        } catch (DataAccessException e) {
            logger.error("addUserByJdbcTemplate异常:", e);
        }
    }

    /**
     * DruidDataSource获取连接
     */
    public void addUserByDataSource(String name, Integer age) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        try {
            connection = dataSource.getConnection();
            String sql = "INSERT INTO user(name, age) VALUES(?,?)";
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, name);
            preparedStatement.setInt(2, age);
            preparedStatement.executeUpdate();
        } catch (SQLException e) {
            logger.error("addUserByDataSource异常:", e);
        } finally {
            try {
                if (preparedStatement != null) {
                    preparedStatement.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                logger.error("addUserByDataSource关闭连接异常:", e);
            }
        }

    }
}

上述代码中使用了三种方式操作数据库,分别是:

  1. 使用UserDao中封装好的增加用户的方法
  2. 使用JdbcTemplate对象操作数据库
  3. 使用DataSource对象获取连接,再通过PrepareStatement执行增加操作

第二条示例

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

/**
 * 数据库配置例子
 * <p>
 * Created by jim on 2017/6/24.
 */
public class ApplicationTest {

    private static final String DB_URL = "jdbc:mysql://localhost/test";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "123456";

    @Autowired
    private DataSource dataSource;

    @Autowired
    private JdbcTemplate jdbcTemplate;

    public void test() {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUrl(DB_URL);
        druidDataSource.setUsername(USERNAME);
        druidDataSource.setPassword(PASSWORD);
        druidDataSource.setMaxActive(20);
        druidDataSource.setInitialSize(1);
        druidDataSource.setMinIdle(3);
        druidDataSource.setMaxWait(60000);
        druidDataSource.setPoolPreparedStatements(true);
        druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
        dataSource = druidDataSource;

        String sql = "INSERT INTO user(name,age) VALUES (?,?)";
        jdbcTemplate.update(sql, "name", 18);
    }

}

上述代码中,构建了一个DruidDataSource对象,设置连接url、用户名、密码等连接池参数,之后通过set方法注入到dataSource属性。

通过注入的JdbcTemplate对象即可完成数据库增加操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:数据库阿里连接池 druid配置详解 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • SELinux 入门详解

    SELinux 入门详解 什么是 SELinux? SELinux(Security-Enhanced Linux)是 Linux 内核基于 Flawor 操作系统开发的安全模块。它为操作系统提供了一种访问控制机制,可以让管理员为每个主体(如用户、进程和服务)指定安全策略。 SELinux 架构 SELinux 架构分为三个部分: 安全服务器(Securit…

    database 2023年5月22日
    00
  • MySQL Event事件(定时任务)是什么?

    MySQL是一种流行的关系型数据库管理系统,在实际应用中,我们经常需要执行一些预定的任务或是一些周期性的任务,以达到一定的目的,例如每日清理过期数据、备份数据等等。为了满足这些需求,MySQL提供了一个非常有用的功能——Event事件(定时任务)。 MySQL Event事件是什么 MySQL Event事件是一种可以自动执行任务的机制,类似于操作系统中的定…

    MySQL 2023年3月10日
    00
  • Spring强大事务兼容数据库多种组合解决业务需求

    作为一个开源的Java应用程序框架,Spring框架具有强大的事务支持,可以与各种数据库进行组合解决企业级应用程序的业务需求。以下是Spring强大事务兼容数据库多种组合解决业务需求的攻略: 整合Spring事务管理机制 在Spring框架中,事务管理是通过对javax.transaction.UserTransaction和javax.transactio…

    database 2023年5月18日
    00
  • DB2个人版(Linux)安装

    下面我来详细讲解“DB2个人版(Linux)安装”的完整攻略。 1. 前置条件 在安装DB2个人版之前,需要确认以下条件已经满足: 安装要求:系统为Linux 64位,内存至少为2GB。 确认是否已创建普通用户DB2INST1,并赋予sudo权限。 2. 下载DB2个人版安装媒体 在启动安装之前,需要先下载DB2个人版的安装媒体。可以前往IBM官网下载(ht…

    database 2023年5月22日
    00
  • 在命令行下进行Oracle用户解锁的语句

    Sure,下面是在命令行下进行Oracle用户解锁的完整攻略: 步骤一:登录SQL Plus 在命令行界面下,通过以下命令登录SQL Plus: sqlplus / as sysdba 这里 / as sysdba 表示使用具有 SYSDBA 角色的特权用户连接到 Oracle 数据库。 步骤二:确认用户被锁 在 SQL Plus 下输入以下命令,确认要解锁…

    database 2023年5月21日
    00
  • MySQL合并查询结果的实现

    MySQL的合并查询结果分为两种方式:UNION和UNION ALL。两种方式的区别在于返回结果是否去重。 UNION的格式如下: SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2; 它会将两个SELECT语句的结果集合并,并去除重复的行,合…

    database 2023年5月22日
    00
  • mybatis报错元素内容必须由格式正确的字符数据或标记组成异常的解决办法

    当我们使用mybatis时,有时会出现“元素内容必须由格式正确的字符数据或标记组成”这样的异常,这是由于我们的Mapper.xml或者配置文件中出现了不规范的语法导致的。 下面是解决这个异常的完整攻略: 1. 检查Mapper.xml文件是否正确 首先,我们需要检查Mapper.xml文件是否书写正确,并且所有的元素和属性是否符合标准的XML语法规范,如: …

    database 2023年5月21日
    00
  • Mysql中的Datetime和Timestamp比较

    当在MySQL中使用日期和时间数据时,Datatime和Timestamp是两种最常见的数据类型。虽然它们都可以用于存储日期和时间,但是它们在存储和比较方面有着不同的表现。 Datetime和Timestamp介绍 Datetime Datetime可以存储的日期和时间的范围是从 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部