小代学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:学习不止,码不停蹄!如果您喜欢我的文章,就关注我吧!

原文地址:https://www.cnblogs.com/endless-code/p/11173890.html

时间: 2024-09-30 18:47:21

小代学Spring Boot之数据源的相关文章

小代学Spring Boot之自定义Starter

想要获取更多文章可以访问我的博客?-?代码无止境. 使用Spring Boot框架一段时间之后的小代同学,发现在Spring Boot项目中经常会引入各种各样的Starter,例如Web项目的spring-boot-starter-web以及集成MyBatis时的mybatis-spring-boot-starter.那么这个Starter到底是些什么呢? 什么是Starter 经过一番研究,小代同学了解到Starter主要是Spring Boot用来简化项目依赖的一种形式,比如spring-b

小代学Spring Boot之开篇

想要获取更多文章可以访问我的博客?-?代码无止境. 前情提要 小代是一名入职不久的程序员,公司同事都亲切的称他小代.有一天小代的老大陈BOSS和小代说,公司后端最近准备换技术框架了. 小代: 换成啥? 陈BOSS: Spring Boot,听过没? 小代: 当然听说过,就是由Pivotal团队开发的一个新的框架,它主要是简化Spring应用程序的搭建和开发过程. 陈BOSS: 哟呵,想不到你还知道的挺多的.那挺好啊,现在我给你给任务,搭建一个基于一个Spring Boot的Web示例程序,作为公

从零一起学Spring Boot之LayIM项目长成记(一) 初见 Spring Boot

项目背景 之前写过LayIM的.NET版后端实现,后来又写过一版Java的.当时用的是servlet,websocket和jdbc.虽然时间过去很久了,但是仍有些同学在关注.偶然间我听说了SpringBoot这么个东东,据说是省去了很多繁杂的配置.可以傻瓜式的创建项目,轻轻松松做出一个网站来,那么出于我对LayIM的情有独钟,于是乎想借用它来帮助我学习SpringBoot,并且全程记录,省的以后再走弯路和掌握解决问题的方法.(当然,我也是新手,我的解决方法就是百度,stackovreflow等网

21. Spring Boot过滤器、监听器【从零开始学Spring Boot】

转载:http://blog.csdn.net/linxingliang/article/details/52069490 上一篇文章已经对定义Servlet 的方法进行了说明,过滤器(Filter)和 监听器(Listener)的注册方法和 Servlet 一样,不清楚的可以查看下上一篇文章(20): 本文将直接使用@WebFilter和@WebListener的方式,完成一个Filter 和一个 Listener:使用注解 @ServletComponentScan//这个就是扫描相应的Se

从零一起学Spring Boot之LayIM项目长成记(五)websocket

前言 距离上一篇已经比较久的时间了,项目也是开了个头.并且,由于网上的关于Spring Boot的websocket讲解也比较多.于是我采用了另外的一个通讯框架 t-io 来实现LayIM中的通讯功能.本篇会着重介绍我在研究与开发过程中踩过的坑和比较花费的时间的部分. WebSocket 在研究 t-io 的时候,我已经写过关于t-io框架的一些简单例子分析以及框架中关于 websocket 中的编解码代码分析等,有兴趣的同学可以先看一下.因为 在LayIM项目中我会是用到 Showcase D

Spring Boot使用模板freemarker【从零开始学Spring Boot(转)

视频&交流平台: à SpringBoot网易云课堂视频 http://study.163.com/course/introduction.htm?courseId=1004329008 à Spring Boot交流平台 http://412887952-qq-com.iteye.com/blog/2321532 [原创文章,转载请注明出处] 103. Spring Boot Freemarker特别篇之contextPath[从零开始学Spring Boot] 最近有好久没有更新博客了,感谢

4. 使用别的json解析框架【从零开始学Spring Boot】

转载:http://blog.csdn.net/linxingliang/article/details/51585921 此文章已经废弃,请看新版的博客的完美解决方案: 78. Spring Boot完美使用FastJson解析JSON数据[从零开始学Spring Boot] http://412887952-qq-com.iteye.com/blog/2315202

关于Spring Boot 多数据源的事务管理

自己的一些理解:自从用了Spring Boot 以来,这近乎零配置和“约定大于配置”的设计范式用着确实爽,其实对零配置的理解是:应该说可以是零配置可以跑一个简单的项目,因为Spring Boot 有默认的配置,当默认的配置满足不了你的时候,这时候所谓的零配置只是换了一种方式而已,我们都知道程序员最擅长的就是写代码,相比来说xml文件还是有点蛋疼的: 行啊,Spring Boot说你不是擅长写代码,那我就把配置给你转换为写代码的形式,所以你会发现在Spring Boot 中使用@Configura

43. Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】

[视频&交流平台] àSpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=400000000155061&utm_medium=share à SpringCloud视频 http://study.163.com/course/introduction.htm?courseId=1004638001&a