SpringBoot之druid数据源

自定义druid数据配置源

1、导入pom依赖

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid</artifactId>
	<version>1.1.17</version>
</dependency>

2、编写配置类
通过localhost:8081/druid访问druid来监控http://localhost:8081/getCount请求

@Configuration
public class MyConfig {

    @ConfigurationProperties("spring.datasource")
    @Bean
    public DataSource myDataSource() throws SQLException {
        DruidDataSource druidDataSource = new DruidDataSource();
        //绑定SQL监控和SQL防火墙功能已经开启日志
//        druidDataSource.setFilters("stat, wall, log4j");
//        druidDataSource.setUrl();
        return new DruidDataSource();
    }
    /**
     * 配置druid的监控页功能
     **/
    @Bean
    public ServletRegistrationBean statViewServlet(){
        StatViewServlet viewServlet = new StatViewServlet();
        //通过http://localhost:8081/druid访问druid
        ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean(viewServlet, "/druid/*");
//        //加入druid登录账号和密码
//        registrationBean.addInitParameter("loginUsername", "123");
//        registrationBean.addInitParameter("loginPassword", "123");
        return registrationBean;
    }

    /**
     * 配置druid的web应用功能
     **/
    @Bean
    public FilterRegistrationBean webStatFilter(){
        WebStatFilter webStatFilter = new WebStatFilter();
        FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean(webStatFilter);
        //拦截所有请求
        registrationBean.setUrlPatterns(Arrays.asList("/*"));
        //排除某些请求
        registrationBean.addInitParameter("exclusions", "*.js, *.css, /druid/*");
        return registrationBean;
    }
}

通过源码可知数据库连接池的配置,是自己容器中没有DataSource才自动配置的,底层配置好的连接池是:HikariDataSource

	@Configuration(proxyBeanMethods = false)
	@Conditional(PooledDataSourceCondition.class)
	@ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
	@Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class,
			DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class,
			DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class })
	protected static class PooledDataSourceConfiguration

3、通过@ConfigurationProperties注解配置类的数据源会覆盖原有jdbc数据源,也可以通过在配置类中druidDataSource.setUrl()等方法来配置账号密码地址等

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    password: root
    url: jdbc:mysql://127.0.0.1:3306/bbb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true
    username: root
    filters: stat, wall, log4j

4、请求路径

@Controller
public class UserController {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @ResponseBody
    @RequestMapping(value = "/getCount", method = RequestMethod.GET)
    public String getCount(){
        Long l = jdbcTemplate.queryForObject("select count(*) from t_book", Long.class);
        return l.toString();
    }
}

实现图如下
在这里插入图片描述
druid官方github地址
https://github.com/alibaba/druid

start整合druid数据源

1、导入pom依赖

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid-spring-boot-starter</artifactId>
	<version>1.1.17</version>
</dependency>

自动配置项 DruidDataSourceAutoConfigure源码

@Configuration
@ConditionalOnClass({DruidDataSource.class})
@AutoConfigureBefore({DataSourceAutoConfiguration.class})
@EnableConfigurationProperties({DruidStatProperties.class, DataSourceProperties.class})
@Import({DruidSpringAopConfiguration.class, DruidStatViewServletConfiguration.class, DruidWebStatFilterConfiguration.class, DruidFilterConfiguration.class})
public class DruidDataSourceAutoConfigure

● DruidStatProperties.class,通过spring.datasource.druid与yaml配置文件绑定
在这里插入图片描述
● DataSourceProperties.class,通过spring.datasource与yaml配置文件绑定
在这里插入图片描述
● DruidSpringAopConfiguration.class, 监控SpringBean的;配置项:spring.datasource.druid.aop-patterns
● DruidStatViewServletConfiguration.class, 监控页的配置:spring.datasource.druid.stat-view-servlet;
● DruidWebStatFilterConfiguration.class, web监控配置;spring.datasource.druid.web-stat-filter;
● DruidFilterConfiguration.class}) 所有Druid自己filter的配置
在这里插入图片描述

2、yaml配置

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    password: admin
    url: jdbc:mysql://127.0.0.1:3306/bbb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true
    username: 123456
    filters: stat, wall
    druid:
      filters: stat,wall                  #底层开启功能,stat(sql监控),wall(防火墙)
      filter:                             #对上面filters里面的属性的详细配置
        stat:
          slow-sql-millis: 1000
          logSlowSql: true
          enabled: true
        wall:
          enabled: true
          config:
            drop-table-allow: false
      aop-patterns: com.example.demo.*    #监控SpringBean
      stat-view-servlet:                  #配置监控页功能
        login-username: 123
        login-password: 123
        enabled: true
        reset-enable: false
      web-stat-filter:                    #监控web
        enabled: true
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
        url-pattern: /*

3、请求路径

@Controller
public class UserController {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @ResponseBody
    @RequestMapping(value = "/getCount", method = RequestMethod.GET)
    public String getCount(){
        Long l = jdbcTemplate.queryForObject("select count(*) from t_book", Long.class);
        return l.toString();
    }
}

SpringBoot配置示例
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

配置项列表https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值