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

 更新时间:2025年11月03日 08:39:04   作者:0和1搭建网络世界  
这篇文章主要介绍了如何在Spring Boot项目中集成和配置Druid数据源,包括添加依赖、配置数据源、监控台配置以及Druid常用启动器的使用

一、druid

1.添加依赖

引入依赖

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>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;
    
    @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 dataSource(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常用启动器

1.添加依赖

添加常用启动器依赖

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

2.配置

依赖添加完成后,不需要创建数据源,可直接使用,但是访问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) {
            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

其他配置同理

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 手把手带你了解Java-Stream流方法学习及总结

    手把手带你了解Java-Stream流方法学习及总结

    这篇文章主要介绍了通过实例了解JavaStream流的方法学习和总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-08-08
  • 浅谈Java类的加载,链接及初始化

    浅谈Java类的加载,链接及初始化

    今天给大家带来的是关于Java的相关知识,文章围绕着Java类的加载,链接及初始化展开,文中有非常详细的解释及代码示例,需要的朋友可以参考下
    2021-06-06
  • 解决报java.lang.AssertionError错误的问题

    解决报java.lang.AssertionError错误的问题

    这篇文章主要介绍了解决报java.lang.AssertionError错误的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Java网络编程之简易聊天室的实现

    Java网络编程之简易聊天室的实现

    这篇文章主要为大家详细介绍了如何利用Java语言实现一个简易聊天室功能,可以实现运行客户端和连接服务器,文中的示例代码讲解详细,需要的可以了解一下
    2022-10-10
  • Java中的CompletableFuture基本用法

    Java中的CompletableFuture基本用法

    这篇文章主要介绍了Java中的CompletableFuture基本用法,CompletableFuture是java.util.concurrent库在java 8中新增的主要工具,同传统的Future相比,其支持流式计算、函数式编程、完成通知、自定义异常处理等很多新的特性,需要的朋友可以参考下
    2024-01-01
  • Java集合中的WeakHashMap、IdentityHashMap、EnumMap详解

    Java集合中的WeakHashMap、IdentityHashMap、EnumMap详解

    这篇文章主要介绍了Java集合中的WeakHashMap、IdentityHashMap、EnumMap详解,HashMap的key保留了对实际对象的强引用,这意味着只要HashMap对象不被销毁,还HashMap的所有key所引用的对象就不会被垃圾回收,需要的朋友可以参考下
    2023-09-09
  • 关于feign调用的参数传递问题(@RequestBody和@RequestParam)

    关于feign调用的参数传递问题(@RequestBody和@RequestParam)

    这篇文章主要介绍了关于feign调用的参数传递问题(@RequestBody和@RequestParam),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • SpringBoot+mybatis+Vue实现前后端分离项目的示例

    SpringBoot+mybatis+Vue实现前后端分离项目的示例

    本文主要介绍了SpringBoot+mybatis+Vue实现前后端分离项目的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • java 获取服务器真实IP的实例

    java 获取服务器真实IP的实例

    这篇文章主要介绍了java 获取服务器真实IP的实例的相关资料,这里提供实现方法帮助大家学习理解这部分内容,需要的朋友可以参考下
    2017-08-08
  • Spring Retry 实现乐观锁重试实践记录

    Spring Retry 实现乐观锁重试实践记录

    本文介绍了在秒杀商品SKU表中使用乐观锁和MybatisPlus配置乐观锁的方法,并分析了测试环境和生产环境的隔离级别对乐观锁的影响,通过简单验证,展示了在可重复读和读已提交隔离级别下的不同行为,感兴趣的朋友一起看看吧
    2025-03-03

最新评论