小代学Spring Boot之数据源

想要获取更多文章能够访问个人博客 - 代码无止境css

通过一天对Spring Boot的研究,小代同窗已经对Spring Boot框架有了一个大概的认识。而且还建立了一个简单的Spring Boot的Web应用程序,若是你还不知道如何建立的话,能够访问《小代学Spring Boot之开篇》这篇文章。下一步陈Boss小代作的是使用Spring Boot项目链接数据库。
相信咱们都知道,在链接数据库的时候咱们通常都会使用数据库链接池,这样作的好处在于能够重用数据库资源,还能够统一管理数据库链接,避免链接泄露。小代选择的是阿里巴巴的Druid链接池。那么为啥会选择Druid呢?小代给出的解释是下面这样的。html

为啥要使用Druid?

首先简单的介绍一下Druid。Druid是阿里巴巴开源的一个数据库链接池实现,它结合了C3P0、DBCP、PROXOOL等链接池的优势,并且还加入了日志监控,官方文档称其是Java语言中最好的数据库链接池。
那么接下来,咱们就来看下小代同窗是如何在Spring Boot项目中集成Druid链接池而且实现SQL监控的吧。java

添加依赖包

首先第一步小代同窗作的是添加Druid相关的依赖包。除了Druid自己以外,还需MySQL链接驱动包。只须要在pom.xml中添加以下内容便可。mysql

<!--链接驱动-->
<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格式的配置文件),小代同窗添加的配置项以下所示。git

# 数据源类型
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监控。在这一步他先建立了一个类来映射配置文件中配置项的值,以下面代码所示,因为篇幅的缘由,在此不所有展现,须要的同窗能够从源码中获取github

@ConfigurationProperties(prefix = "spring.datasource.druid")
public class DruidDataSourceProperties {
    ... 
    /**
     * 数据源名称
     */
    private String  name;

    /**
     * 数据库链接url
     */
    private String  url;
   ....
}

能够看出来DruidDataSourceProperties的属性名称和上一步定义的配置项是一一对应的,经过@ConfigurationProperties注解将指定前缀的配置项映射到这个类中,并在Spring Boot项目启动的时候初始化一个实例,并交由Spring容器管理。
接下来还须要建立一个Java配置类。数据源的定义以及Druid监控相关的配置将会放在这个配置类中。下面代码只是截取源码部份内容,须要源码的同窗点击这里自取spring

@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监控的相关配置。sql

@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控制台的登陆界面,输入用户名密码后看到以下界面就表明数据源配置成功了。浏览器

Druid Web监控页面

结束语

本文主要介绍了如何在Spring Boot项目中使用Druid链接池连接数据库,而且提到了如何配置Druid内置的SQL监控。你能够在Github上找到本文的完整实现,若是您以为文章写的还能够的话,顺手给个Star,这是对我最好的鼓励。

PS:学习不止,码不停蹄!若是您喜欢个人文章,就关注我吧!

扫码关注“代码无止境”

相关文章
相关标签/搜索