Spring Boot集成Druid数据库连接池
程序员文章站
2024-02-28 20:30:28
1. 前言
druid数据库连接池由阿里巴巴开源,号称是java语言中最好的数据库连接池,是为监控而生的。druid的官方地址是:
通过本文,我们可以看到
s...
1. 前言
druid数据库连接池由阿里巴巴开源,号称是java语言中最好的数据库连接池,是为监控而生的。druid的官方地址是:
通过本文,我们可以看到
- spring boot 如何配置数据源
- spring boot 如何集成druid数据库连接池
- 如何打开并访问druid数据库连接池的监控功能
- 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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读