开发者

druid以及监控台使用及配置过程

目录
  • 一、druid
    • 1.添加依赖
    • 2.配置
  • 二、监控台配置
    • 1.创建配置类
  • 三、Druid常用启动器
    • 1.添加依赖
    • 2.配置
  • 总结

    一、druid

    1.添加依赖

    引入依赖

    <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId&编程gt;druid</artifactId>
                <version>1.2.8</version>
            </dependency>
            <!-- jdbc -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <!-- myBATis -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.1</version>
            </dependency>
            <!-- mysql驱动 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-Java</artifactId>
            </dependency>
    

    2.配置

    • 配置yml文件
    spring:
      datasource:
        username: root
        password: root
        url: jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&
        driver-class-name: com.mysql.cj.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
    

    配置数据源的三种方式

    1.在配置类中创建一个数据源

    @Value("spring.datasource.url")
        private String url;
        @Value("spring.datasource.username")
        private String userName;
        @Value("spring.datasource.password")
        private String password;
        @Value("spring.datasource.driver-class-name")
        private String driverClassName;
        @Value("spring.datasource.type")
        private String type;
        
    php    @Bean
        public DataSource dataSource(){
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setUrl(url);
            dataSource.setUsername(userName);
            dataSource.setPassword(password);
            dataSource.setDriverClassName(driverClassName);
            dataSource.setDbType(type);
            return dataSource;
        }
    

    2.使用注解ConfigurationProperties

    @Bean
        @ConfigurationProperties(prefix = "spring.datasource")
        public DataSource dataSource(){
            return new DruidDataSource();
        }
    

    3.使用DataSourceProperties构造者设计模式

    	@Bean
        public DataSource dataphpSource(DataSourceProperties properties){
           return properties.initializeDataSourceBuilder().build();
        }
    

    二、监控台配置

    1.创建配置类

    /**
         * 监控台的servlet
         */
        @Bean
        public ServletRegistrationBean statViewServlet() {
            ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
            servletRegistrationBean.setServlet(new StatViewServlet());
            servletRegistrationBean.addUrlMappings("/druid/*")
            // 添加IP白名单
            servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
            // 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
            // servletRegistrationBean.addInitParameter("deny", "127.0.0.1");
            // 添加控制台管理用户
            servletRegistrationBean.addInitParameter("loginUsername", "admin");
            servletRegistrationBean.addInitParameter("loginPassword", "123456");
            // 是否能够重置数据
            servletRegistrationBean.addInitParameter("resetEnable", "false");
            return servletRegistrationBean;
        }
    
        /**
         * 配置服务过滤器 :监控哪些访问
         * @return 返回过滤器配置对象
         */
        @Bean
        public FilterRegistrationBean statFilter() {
            FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
            filterRegistrationBean.setFilter(new WebStatFilter());
            // 添加过滤规则
            filterRegistrationBean.addUrlPatterns("/*");
            // 忽略过滤格式
            filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.jpg,*.css,*.ico,/druid/*,");
            return filterRegistrationBean;
        }
    

    本地访问http://localhost:8080/druid

    druid以及监控台使用及配置过程

    三、Druid常用启动器

    1.添加依赖

    添加常用启动器依赖

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

    2.配置

    依赖添加完成后,不需要创建数据源,可直接使用,但是访问Druid的控制台,却无法访问。

    大致查看源码:

    druid以及监控台使用及配置过程

    //创建一个DruidDataSourceWrapper数据源
    @ConditionalOnMissingBean
        public DataSource dataSource() {
            LOGGER.info("Init DruidDataSource");
            return new DruidDataSourceWrapper();
        }
    
    @ConfigurationProperties("spring.datasource.druid")
    public class DruidDataSourceWrapper extends DruidDataSource implements InitializingBean {
        @Autowired
        private DataSourceProperties basicProperties;
    
        public DruidDataSourceWrapper() {
        }
    	//重写InitializingBean方法,springboot启动时,会自动加载 
        public void afterPropertiesSet(编程客栈) throws Exception {
            if(super.getUsername() == null) {
            	//从对象basicProperties中拿设置的用户名
                super.setUsername(this.basicProperties.determineUsername());
            }
    
            if(super.getPassword() == null) {
            	//从对象basicProperties中拿设置的用户名
                super.setPassword(this.basicProperties.determinePassword());
            }
    
            if(super.getUrl() == null) {
               javascript super.setUrl(this.basicProperties.determineUrl());
            }
    
            if(super.getDriverClassName() == null) {
                super.setDriverClassName(this.basicProperties.getDriverClassName());
            }
    
        }
    }
    //查看basicProperties
    @ConfigurationProperties(prefix = "spring.datasource")
    public class DataSourceProperties implements BeanClassLoaderAware, InitializingBean {
    
    	private ClassLoader classLoader;
    
    	private String name;
    
    	private boolean generateUniqueName;
    
    	private Class<? extends DataSource> type;
    
    	private String driverClassName;
    	....
    }
    

    由此看出,在yml文件数据源的配置:spring.datasource.url等等

    我们在回头看上面的截图中:DruidDataSourceAutoConfigure类上@Import注解中引入DruidStatViewServletConfiguration.class,我们可以点开看看:

    @ConditionalOnWebApplication
    @ConditionalOnProperty(
        name = {"spring.datasource.druid.stat-view-servlet.enabled"},
        havingValue = "true"
    )
    public class DruidStatViewServletConfiguration {
        private static final String DEFAULT_ALLOW_IP = "127.0.0.1";
    
        public DruidStatViewServletConfiguration() {
        }
    
        @Bean
        public ServletRegistrationBean statViewServletRegistrationBean(DruidStatProperties properties) {
        	//获取Druid监控台配置信息
            StatViewServlet config = properties.getStatViewServlet();
            ServletRegistrationBean registrationBean = new ServletRegistrationBean();
            registrationBean.setServlet(new com.alibaba.druid.support.http.StatViewServlet());
            registrationBean.addUrlMappings(new String[]{config.getUrlPattern() != null?config.getUrlPattern():"/druid/*"});
            if(config.getAllow() != null) {
                registrationBean.addInitParameter("allow", config.getAllow());
            } else {
                registrationBean.addInitParameter("allow", "127.0.0.1");
            }
    
            if(config.getDeny() != null) {
                registrationBean.addInitParameter("deny", config.getDeny());
            }
    
            if(config.getLoginUsername() != null) {
                registrationBean.addInitParameter("loginUsername", config.getLoginUsername());
            }
    
            if(config.getLoginPassword() != null) {
                registrationBean.addInitParameter("loginPassword", config.getLoginPassword());
            }
    
            if(config.getResetEnable() != null) {
                registrationBean.addInitParameter("resetEnable", config.getResetEnable());
            }
    
            return registrationBean;
        }
    }
    

    ConditionalOnProperty注解做了限制,由此可看出yml需要配置spring.datasource.druid.stat-view-servlet.enabled属性,且为true。其他的用户名、密码如何配置呢

    配置信息都是从StatViewServlet类中获取,查看一下代码

    @ConfigurationProperties("spring.datasource.druid")
    public class DruidStatProperties {
        private String[] aopPatterns;
        private DruidStatProperties.StatViewServlet statViewServlet = new DruidStatProperties.StatViewServlet();
        public static class StatViewServlet {
            private boolean enabled;
            private String urlPattern;
            private String allow;
            private String deny;
            private String loginUsername;
            private String loginPassword;
            private String resetEnable;
    
     	}
     }      
    

    由此看出:

    设置账号的spring.datasource.druid.StatViewServlet.loginUsername

    yml的格式spring.datasource.druid.stat-view-servlet.login-username

    其他配置同理

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜