SpringBoot整合第三方数据源(例如Druid)

第一种 自定义方式

如何使用

引入依赖

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

编写配置类

@Configuration
public class MyDatasourceConfig {

    /**
     * 默认的自动配置,容器中没有才会配置
     * @ConditionalOnMissingBean(DataSource.class)
     * @return
     */
    //指定和配置文件中的spring.datasource自动装配
    @ConfigurationProperties("spring.datasource")
    @Bean
    public DataSource dataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
//        druidDataSource.setUrl("");
        return druidDataSource;
    }
}

测试

    @Autowired
    JdbcTemplate jdbcTemplate;

    /**
     * 当前表共有 12 条数据。
     */
    @Test
    public void test1(){
        Long count = jdbcTemplate.queryForObject("select count(*) from smbms_user", Long.class);
        log.info("当前表共有 {} 条数据。",count);
    }

    @Autowired
    DataSource dataSource;

    @Test
    public void test2(){
        log.info("当前数据源是 {}",dataSource.getClass());
    }

查看Druid的监控页面

在配置类中添加相应配置

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

测试访问 http://localhost:8080/druid/index.html 可以访问到

image

查看SQL监控是否生效

在controller里添加如下测试请求

    @Autowired
    JdbcTemplate jdbcTemplate;

    @ResponseBody
    @GetMapping("/sql")
    public String queryFormDB(){
        Long count = jdbcTemplate.queryForObject("select count(*) from smbms_user", Long.class);
        return count.toString();
    }

在配置类里开启sql监控配置 (必须开启,要不sql监控不到)

image
也可以通过修改配置文件的方式
image

启动项目测试访问

  • 先发几次sql请求 http://localhost:8080/sql
  • 查看druid中的sql监控,这里之前是空白的
    image
  • 其中时间分布解释如下
    image

采集web-jdbc关联监控的数据

在配置类添加web-jdbc监控配置

    /**
     * WebStatFilter采集web-jdbc关联监控的数据
     * @return
     */
    @Bean
    public FilterRegistrationBean webStatFilter(){

        WebStatFilter webStatFilter = new WebStatFilter();
        FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<WebStatFilter>(webStatFilter);
        registrationBean.setUrlPatterns(Arrays.asList("/*"));
        registrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return registrationBean;
    }

启动项目测试访问

开启sql防火墙

在配置类中添加防火墙相关配置

image

启动项目测试访问

访问Druid可以直接访问,现在添加账号密码

在配置类中添加相关配置

image

启动项目测试访问,重新登录项目访问,为了更全面的查看监控信息

  • 再次访问 localhost:8080/druid 直接跳到登录页
    image
  • 输入账号密码 admin 123456 就可以进来
    image
  • 切换到url监控,这都是我刚才访问的路径
    image
  • 切换到session监控,这是我刚才登录系统的信息
    image

第二种 starter方式

引入starter依赖

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

在application.yml中添加相应配置

spring:
  devtools:
    restart:
      enabled: true
      additional-paths: src/main/java,src/main/resources
  thymeleaf:
    cache: false

  servlet:
    multipart:
      max-file-size: 10MB #单个文件的大小
      max-request-size: 100MB # 整个请求要求的大小
  datasource:
    url: jdbc:mysql://localhost:3306/smbms?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: love123
    type: com.zaxxer.hikari.HikariDataSource # 默认数据源,也可以不写
    driver-class-name: com.mysql.jdbc.Driver
#    filters: stat,wall
    druid:
      stat-view-servlet: #配置监控页
        enabled: true
        login-username: adminadmin
        login-password: 123456123
        reset-enable: false #重置按钮是否生效,虽然还有,但是功能已经失效
      web-stat-filter: #监控web
        enabled: true
        url-pattern: /*
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
      aop-patterns: com.atguigu.admin.* #监控springbean
      filters: stat,wall # 底层开启功能,stat是sql监控,wall是防火墙
      filter:
        stat:
          slow-sql-millis: 1000
          log-slow-sql: true
          enabled: true
        wall:
          enabled: true
          config:
            drop-table-allow: false
  jdbc:
    template:
      query-timeout: 3 # 3s数据没查出来,那么就超时

测试访问

image
image
image
image
image
image

可以参考github

posted @ 2021-08-14 16:44  卡卡罗特琪琪  阅读(287)  评论(0编辑  收藏  举报