当前位置: 移动技术网 > IT编程>开发语言>Java > Spring Boot集成Druid数据库连接池

Spring Boot集成Druid数据库连接池

2019年07月22日  | 移动技术网IT编程  | 我要评论

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网