小代学Spring Boot之数据源
想要获取更多文章可以访问我的博客 - 代码无止境。
经过一天对Spring Boot的研究,小代同学已经对Spring Boot框架有了一个大概的认识。并且还创建了一个简单的Spring Boot的Web应用程序,如果你还不知道如何创建的话,可以访问《小代学Spring Boot之开篇》这篇文章。下一步陈Boss让小代做的是使用Spring Boot项目连接数据库。
相信我们都知道,在连接数据库的时候我们一般都会使用数据库连接池,这样做的好处在于可以重用数据库资源,还可以统一管理数据库连接,避免连接泄露。小代选择的是阿里巴巴的Druid连接池。那么为啥会选择Druid呢?小代给出的解释是下面这样的。
为啥要使用Druid?
首先简单的介绍一下Druid。Druid是阿里巴巴开源的一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等连接池的优点,而且还加入了日志监控,官方文档称其是Java语言中最好的数据库连接池。
那么接下来,我们就来看下小代同学是如何在Spring Boot项目中集成Druid连接池并且实现SQL监控的吧。
添加依赖包
首先第一步小代同学做的是添加Druid相关的依赖包。除了Druid本身之外,还需MySQL连接驱动包。只需要在pom.xml
中添加如下内容即可。
<!--连接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.28</version>
</dependency>
配置文件
添加依赖包后,小代同学添加连接池相关的配置项。在Spring Boot项目中不再使用XML文件的方式来配置项目,取而代之的是将一些配置项放在application.property
文件中(PS:Spring Boot还支持YAML格式的配置文件),小代同学添加的配置项如下所示。
# 数据源类型
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 数据库url
spring.datasource.druid.url=jdbc:mysql://localhost:3306/spring_tutorial?useUnicode=true&characterEncoding=UTF-8
# 驱动
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
# 用户名
spring.datasource.druid.username=root
# 密码
spring.datasource.druid.password=123456
# 最大连接数
spring.datasource.druid.max-active=100
# 连接池初始化大小
spring.datasource.druid.initial-size=1
# 获取连接最大等待时间
spring.datasource.druid.max-wait=60000
# 最小连接数
spring.datasource.druid.min-idle=1
# 间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
# 验证链接是否有效的sql
spring.datasource.druid.validation-query=select 'x'
# 空闲时检测连接是否有效
spring.datasource.druid.test-while-idle=true
# 连接被借出时检查是否有效,影响性能,所以此处关闭
spring.datasource.druid.test-on-borrow=false
# 当连接返还时检查连接是否有效,影响性能,默认关闭
spring.datasource.druid.test-on-return=false
# 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle,但是在mysql下建议关闭。
spring.datasource.druid.pool-prepared-statements=false
配置数据源
接下来小代同学要做的就是使用Java Config的方式配置数据源和Druid Web监控。在这一步他先创建了一个类来映射配置文件中配置项的值,如下面代码所示,由于篇幅的原因,在此不全部展示,需要的同学可以从源码中获取。
@ConfigurationProperties(prefix = "spring.datasource.druid")
public class DruidDataSourceProperties {
...
/**
* 数据源名称
*/
private String name;
/**
* 数据库连接url
*/
private String url;
....
}
可以看出来DruidDataSourceProperties
的属性名称和上一步定义的配置项是一一对应的,通过@ConfigurationProperties
注解将指定前缀的配置项映射到这个类中,并在Spring Boot项目启动的时候初始化一个实例,并交由Spring容器管理。
接下来还需要创建一个Java配置类。数据源的定义以及Druid监控相关的配置将会放在这个配置类中。下面代码只是截取源码部分内容,需要源码的同学点击这里自取。
@Configuration
@EnableConfigurationProperties({ DruidDataSourceProperties.class })
@ConditionalOnProperty(name = "spring.datasource.druid.url")
public class DruidDataSourceConfiguration {
@Autowired
private DruidDataSourceProperties druidDataSourceProperties;
@Bean(name = "druidDataSource", initMethod = "init", destroyMethod = "close")
@ConditionalOnMissingBean(name = "druidDataSource")
public DruidDataSource druidDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(druidDataSourceProperties.getUrl());
dataSource.setUsername(druidDataSourceProperties.getUsername());
dataSource.setPassword(druidDataSourceProperties.getPassword());
dataSource.setDriverClassName(druidDataSourceProperties.getDriverClassName());
...
}
}
如上代码所示我们只会在配置文件中存在spring.datasource.druid.url
这个配置项时才会初始化它里面所有的配置。还可以看出来的是定义数据源的步骤其实很简单,无非就是将配置项中的值一项一项赋值给new出来的数据源对象。创建完数据源之后,还需要实现Druid监控的相关配置。
@Bean
public ServletRegistrationBean druidServlet() {
// 现在要进行druid监控的配置处理操作
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(
new StatViewServlet(), "/druid/*");
// 白名单,多个用逗号分割, 如果allow没有配置或者为空,则允许所有访问
servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
// 黑名单,多个用逗号分割 (共同存在时,deny优先于allow)
servletRegistrationBean.addInitParameter("deny", "192.168.1.110");
// 控制台管理用户名
servletRegistrationBean.addInitParameter("loginUsername", "admin");
// 控制台管理密码
servletRegistrationBean.addInitParameter("loginPassword", "itweknow.cn");
// 是否可以重置数据源,禁用HTML页面上的“Reset All”功能
servletRegistrationBean.addInitParameter("resetEnable", "false");
return servletRegistrationBean ;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean() ;
filterRegistrationBean.setFilter(new WebStatFilter());
//所有请求进行监控处理
filterRegistrationBean.addUrlPatterns("/*");
//添加不需要忽略的格式信息
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.css,/druid/*");
return filterRegistrationBean ;
}
从上面的两段代码看,我们定义了一个Servlet和一个Filter,主要设置了访问控制台的白黑名单以及登录的用户名密码,以及Druid拦截的url。
查看效果
经过上面的配置,整个数据源的配置就完成了。接下来我们只需要启动整个项目,然后浏览器访问http://localhost:8080/druid/index.html
就可以看到效果了。访问上面的地址后,会进入到Web控制台的登录界面,输入用户名密码后看到如下界面就代表数据源配置成功了。
结束语
本文主要介绍了如何在Spring Boot项目中使用Druid连接池链接数据库,并且提到了如何配置Druid内置的SQL监控。你可以在Github上找到本文的完整实现,如果您觉得文章写的还可以的话,顺手给个Star,这是对我最好的鼓励。
PS:学习不止,码不停蹄!如果您喜欢我的文章,就关注我吧!
小代学Spring Boot之数据源的更多相关文章
- 小代学Spring Boot之集成MyBatis
想要获取更多文章可以访问我的博客 - 代码无止境. 上一篇小代同学在Spring Boot项目中配置了数据源,但是通常来讲我们访问数据库都会通过一个ORM框架,很少会直接使用JDBC来执行数据库操作的 ...
- 小代学Spring Boot之自定义Starter
想要获取更多文章可以访问我的博客 - 代码无止境. 上一篇小代同学在Spring Boot项目中配置了数据源,但是通常来讲我们访问数据库都会通过一个ORM框架,很少会直接使用JDBC来执行数据库操作的 ...
- 小代学Spring Boot之开篇
想要获取更多文章可以访问我的博客 - 代码无止境. 前情提要 小代是一名入职不久的程序员,公司同事都亲切的称他小代.有一天小代的老大陈BOSS和小代说,公司后端最近准备换技术框架了. 小代: 换成啥? ...
- 小代介绍Spring Boot
想要获取更多文章可以访问我的博客 - 代码无止境. 小代很顺利的完成了陈BOSS交代给他搭建Spring Boot示例程序的任务.但是小代是一个乐于学习的程序员,他通过一番学习总结了一篇简单介绍Spr ...
- (43). Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】
在上一篇我们介绍了多数据源,但是我们会发现在实际中我们很少直接获取数据源对象进行操作,我们常用的是jdbcTemplate或者是jpa进行操作数据库.那么这一节我们将要介绍怎么进行多数据源动态切换.添 ...
- (42)Spring Boot多数据源【从零开始学Spring Boot】
我们在开发过程中可能需要用到多个数据源,我们有一个项目(MySQL)就是和别的项目(SQL Server)混合使用了.其中SQL Server是别的公司开发的,有些基本数据需要从他们平台进行调取,那么 ...
- 从零一起学Spring Boot之LayIM项目长成记(一) 初见 Spring Boot
项目背景 之前写过LayIM的.NET版后端实现,后来又写过一版Java的.当时用的是servlet,websocket和jdbc.虽然时间过去很久了,但是仍有些同学在关注.偶然间我听说了Spring ...
- 65.什么是IOC?【从零开始学Spring Boot】
[从零开始学习Spirng Boot-常见异常汇总] 这个小节吧,是无意当中看了一篇文章,觉得介绍的特别好,引用到我的博客中,让大家也乐下.那么他是怎么解说IOC的呢?看如下: 套用好莱坞的一句名言就 ...
- 59. Spring Boot Validator校验【从零开始学Spring Boot】
大纲: (1) 入门例子: (2) 国际化: (3) 在代码中添加错误信息: (1) 入门例子: Validator主要是校验用户提交的数据的合理性的,比如是否为空了,密码长度是否大于6位,是否是纯数 ...
随机推荐
- AngularJS $http和$.ajax
$http请求 $http请求返回之后,给前台绑定数据赋值,会自动更新数据 ajax请求 $.ajax请求返回之后,给前台绑定数据赋值,不会自动更新数据,需要用$scope.$apply手动刷新 ap ...
- WPF 自定义验证规则
<Window x:Class="DataBindingExam.MainWindow" xmlns="http://schemas.microsof ...
- Plupload上传实例《模仿微云上传实例》,带源码
Plupload上传实例<模仿微云上传实例>,带源码,作者:鱼塘总裁 如有疑问,加群交流:646104701 一.实例截图 1.上传过程 2.上传成功 3.上传失败 4.最小化 二.所需文 ...
- 图像滤镜艺术--Toaster滤镜
原文:图像滤镜艺术--Toaster滤镜 根据Instagram CEO的说法,Toaster滤镜是Instagram所有滤镜中最复杂的滤镜,这个滤镜给人一种新奇的红色烘烤感,很能让人联想起这 ...
- SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)
原文:SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC) 在可更新订阅中,在订阅设置更新方法,将 "排队更新" 设置为 " ...
- Android零碎知识之Style and Theme
Android的styles资源文件中存在了我们在应用中定义的各种style,它们都是以style开始的元素,包含许多属性的集合.但我们一般般它们分为style和theme,那它们有什么区别呢? 一. ...
- Setting up multi nodes live migration in Openstack Juno with devstack
Setting up multi nodes live migration in Openstack Juno with devstack Summary Live migration overvie ...
- Nginx 部署 Ant Design pro
利用Ant Design pro开发的项目,如何用Nginx部署呢? 第一步:把项目打包,打包命令如下: npm run build 运行完毕会在项目目录下生成dist文件夹. 第二步:想要测试打包好 ...
- qt---cdb(Microsoft Console Debugger)调试
支持的调试器 windows系统下主要的调试器: CDB ,只能调试用户程序,只有控制台界面,以命令行形式工作 NTSD, 只能调试用户程序,只有控制台界面,以命令行形式工作 KD,主要用于内核调试, ...
- 查看linux系统时间和时区
参考地址:http://lidao.blog.51cto.com/ 一.使用date命令查看系统时间 [root@benbang ~]# date -R Tue, 01 Aug 2017 15:43: ...