【尚硅谷springboot学习笔记】整合jdbc和druid

学习链接:https://www.bilibili.com/video/BV1Et411Y7tQ?p=171

与数据库相关的有三个重要部分,数据源、事物、JDBC

一、整合JDBC场景

1.1基本配置与测试

首先,导入jdbc启动器、驱动:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>        

配置文件:

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.66.11:3306/db2010?useUnicode=true&characterEncoding-utr-8&useSSL=false
    username: root
    password: 1qaz@WSX

测试:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
@SpringBootTest(classes = Application.class)
class JDBCTest {

    @Autowired
    private JdbcTemplate jdbcTemplate;


@Test
void contextLoads() {
        List<Map<String, Object>> maps = jdbcTemplate.queryForList("select * from payment ");
        Iterator<Map<String, Object>> iterator = maps.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

如果对于自动配置的原理已经懂了,看到这里就结束了。

为什么要自己导入驱动呢?因为springboot也不清楚我们到底是mysql还是oracle的驱动,或者其它的驱动。

导入了场景启动器之后,我们发现,数据源、事物、JDBC都有了:
在这里插入图片描述

1.2自动配置分析

首先,找到jdbc自动配置的位置:
在这里插入图片描述

自动配置相关的类:

  • DataSourceAutoConfiguration 数据源相关
  • DataSourceTransactionManagerAutoConfiguration 事物相关
  • JdbcTemplateAutoConfiguration JDBC相关

DataSourceAutoConfiguration 数据源自动配置分析:

在这里插入图片描述
所以,jdbc启动器场景默认使用的是Hikari数据源

当然,我们也可以通过type来改变这个默认数据源,我们点进去这个源码看一看:
在这里插入图片描述

在这里插入图片描述
而在DataSourceProperties中,这个配置类就映射了配置文件:
在这里插入图片描述

二、自定义整合druid数据源

druid官网:https://github.com/alibaba/druid
先引入依赖:

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

配置类:

@Configuration
public class MyDataSourceConfig {
    
    //默认的自动配置是容器中没有数据源,才会配置默认的
    //现在我们这里自己配置了数据源,那么,使用的就是我们自己配置的
    //配置文件绑定spring.datasource,这里面配置的会和类中的属性绑定
    @ConfigurationProperties("spring.datasource")
    @Bean
    public DataSource getDataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }
}

测试一下,看看我们使用的是不是druid数据源

@Slf4j
@SpringBootTest(classes = Application.class)
public class DruidDatasourceTest {

    @Autowired
    private DataSource dataSource;

    @Test
    void test(){
        log.info(String.valueOf(dataSource.getClass()));
    }
}

结果是druid数据源。

配置监控页面

    /**
     * 配置druid监控页功能
     */
    @Bean
    public ServletRegistrationBean statViewServlet(){
        StatViewServlet statViewServlet = new StatViewServlet();
        ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(statViewServlet,"/druid/*");
        return registrationBean;
    }

访问:http://localhost:8080/druid/index.html
在这里插入图片描述

开启SQL监控和防火墙

spring:
  datasource:
    #开启SQL监控、防火墙
    filters: stat,wall
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @RequestMapping("sql")
    public void sql(){
        List<Map<String, Object>> maps = jdbcTemplate.queryForList("select * from payment ");
        Iterator<Map<String, Object>> iterator = maps.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

发送一个该请求:http://localhost:8080/sql
我们再来看监控页面,这时sql监控和防火墙就有数据了:
在这里插入图片描述

配置web应用监控

    /**
     * 配置web应用监控
     */
    @Bean
    public FilterRegistrationBean webStatFilter(){
        WebStatFilter webStatFilter = new WebStatFilter();
        FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<>(webStatFilter);
        //拦截路径
        registrationBean.setUrlPatterns(Arrays.asList("/*"));
        registrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.css,*.ico,/druid/*" );
        return registrationBean;
    }

再次发送/sql请求,我们看web应用监控页和uri监控,发现都有数据了:
在这里插入图片描述

配置登录账号密码

在这里插入图片描述

三、使用start整合druid数据源

先将上面自定义整合中的相关配置了注释掉

基础用法

引入依赖:

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

配置:

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.66.11:3306/db2010?useUnicode=true&characterEncoding-utr-8&useSSL=false
    username: root
    password: 1qaz@WSX
    druid:
      aop-patterns: com.learning.springboot.*  #监控SpringBean
      filters: stat,wall     # 底层开启功能,stat(sql监控),wall(防火墙)

      stat-view-servlet:   # 配置监控页功能
        enabled: true
        login-username: admin
        login-password: admin
        resetEnable: false

      web-stat-filter:  # 监控web
        enabled: true
        urlPattern: /*
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'


      filter:
        stat:    # 对上面filters里面的stat的详细配置
          slow-sql-millis: 1000
          logSlowSql: true
          enabled: true
        wall:
          enabled: true
          config:
            drop-table-allow: false

自动配置分析

1、由源码可以看到,我们的这个配置类是在springboot官方的数据源配置类之前生效的
在这里插入图片描述
2、配置文件还是和之前的前缀一样,使用的是springboot官方的配置
在这里插入图片描述
3、监控相关配置
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值