欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring Boot集成Druid数据库连接池

程序员文章站 2024-02-28 20:30:28
1. 前言 druid数据库连接池由阿里巴巴开源,号称是java语言中最好的数据库连接池,是为监控而生的。druid的官方地址是: 通过本文,我们可以看到 s...

1. 前言

druid数据库连接池由阿里巴巴开源,号称是java语言中最好的数据库连接池,是为监控而生的。druid的官方地址是:

通过本文,我们可以看到

  1. spring boot 如何配置数据源
  2. spring boot 如何集成druid数据库连接池
  3. 如何打开并访问druid数据库连接池的监控功能
  4. spring boot 使用jdbctemplate操作数据库

2. 配置pom.xml

<parent>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-parent</artifactid>
  <version>1.3.5.release</version>
</parent>

<properties>
  <project.build.sourceencoding>utf-8</project.build.sourceencoding>
  <project.reporting.outputencoding>utf-8</project.reporting.outputencoding>
  <java.version>1.8</java.version>
</properties>

<dependencies>
  <dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-web</artifactid>
  </dependency>
  <dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-jdbc</artifactid>
  </dependency>
  <dependency>
    <groupid>com.alibaba</groupid>
    <artifactid>druid</artifactid>
    <version>1.0.20</version>
  </dependency>
  <dependency>
    <groupid>org.postgresql</groupid>
    <artifactid>postgresql</artifactid>
    <scope>runtime</scope>
  </dependency>
</dependencies>

3. 在application.properties中配置数据源

# 数据库访问配置,此处使用postgres为例。
# 主数据源,默认的
spring.datasource.type=com.alibaba.druid.pool.druiddatasource
spring.datasource.driver-class-name=org.postgresql.driver
spring.datasource.url=jdbc:postgresql://192.168.1.9/jianshudb
spring.datasource.username=postgres
spring.datasource.password=yourpassword

# 下面为连接池的补充设置,应用到上面所有数据源中
# 初始化大小,最小,最大
spring.datasource.initialsize=5
spring.datasource.minidle=5
spring.datasource.maxactive=20
# 配置获取连接等待超时的时间
spring.datasource.maxwait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 
spring.datasource.timebetweenevictionrunsmillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒 
spring.datasource.minevictableidletimemillis=300000
# oracle请使用select 1 from dual
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
# 合并多个druiddatasource的监控数据
#spring.datasource.useglobaldatasourcestat=true

druiddatasource参考配置:
https://github.com/alibaba/druid/wiki/%e9%85%8d%e7%bd%ae_druiddatasource%e5%8f%82%e8%80%83%e9%85%8d%e7%bd%ae

4. 打开druid的监控统计功能

druid的监控统计功能是通过filter-chain扩展实现,如果你要打开监控统计功能,需要配置statfilter,相关代码如下。

@configuration
public class druidconfiguration {

 private static final logger log = loggerfactory.getlogger(druidconfiguration.class);

 @bean
 public servletregistrationbean druidservlet() {
  log.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;
 }

}

等应用启动后,可以访问地址:http://localhost:8080/druid/,用户名和密码见上述代码中的设置,即admin/admin。

5. 使用jdbctemplate操作数据库

假设数据库中有表t_user,其中id=1的user的username为zhangsan。下面的例子演示了通过id查找username的情况。

@restcontroller
public class democontroller {

  @autowired
  jdbctemplate jdbctemplate;

  @requestmapping(value = "/hello.do", method = requestmethod.get)
  public string hello(@requestparam(value = "id", required = true) integer id) {
    string name = getnamebyid(id);
    return (name == null) ? "hello world" : ("hello " + name);
  }

  public string getnamebyid(integer id) {
    string sql = "select username from t_user where id = ? ";
    list<string> list = jdbctemplate.queryforlist(sql, new object[] {id}, string.class);
    return list.isempty() ? null : list.get(0);
  }

}

访问地址:http://localhost:8080/hello.do?id=1

结果输出:hello, zhangsan

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。