zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    python练习:正则表达式
    python练习:字典value值排序,key值排序
    python练习:字符串中的数字排序
    python练习:计算出字符串中每个字符出现的次数
    Jmeter3.1、Ant、Jenkins接口自动化平台配置
    Jmeter3.1、Ant、Jenkins接口自动化平台搭建步骤;所遇问题及解决方案
    Jmeter:实例(测试报告)
    Jmeter:实例(测试指标)
    Python with as 用法
    Python-报错UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence
  • 原文地址:https://www.cnblogs.com/kaka-qiqi/p/15141158.html
Copyright © 2011-2022 走看看