SpringBoot整合Druid

在整合的mybatis的基础上对工程进行改造,参考链接:

https://blog.csdn.net/qq_21067307/article/details/86292779

一、引入druid的起步依赖

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

二、设置druid相关配置

# datasource
#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/zrk?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
#spring.datasource.username=root
#spring.datasource.password=root
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# druid
spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/zrk?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.filters=stat
spring.datasource.druid.maxActive=20
spring.datasource.druid.initialSize=10
spring.datasource.druid.maxWait=60000
spring.datasource.druid.minIdle=1
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
spring.datasource.druid.minEvictableIdleTimeMillis=300000
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=true
spring.datasource.druid.testOnReturn=false
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxOpenPreparedStatements=20
spring.datasource.druid.validationQuery=SELECT 1

三、启动服务验证

浏览器访问接口:

在这里插入图片描述

访问druid监控页面:

http://127.0.0.1:8080/druid/index.html

在这里插入图片描述

四、说明

(1)如果使用druid的起步依赖,就可以不用自己配置druid.url等属性配置文件

(2)springboot已经有druid的自动配置文件,如果熟悉自动配置原理,druid可以配置的参数可以参考DruidDataSource.java

(3)如果(2)不太了解,通用方法了解可以配置的参数方法如下:

在application.properties文件中,按住Ctrl点击相应属性则跳转到属性配置类,如点击spring.datasource.druid.url,

跳转到DruidDataSourceWrapper.java类

@ConfigurationProperties("spring.datasource.druid")
class DruidDataSourceWrapper extends DruidDataSource implements InitializingBean {
    @Autowired
    private DataSourceProperties basicProperties;
    ...

看代码可知其继承DruidDataSource类,进入DruidDataSource.java,可以看到configFromPropety方法

public void configFromPropety(Properties properties) {
        {
            String property = properties.getProperty("druid.name");
            if (property != null) {
                this.setName(property);
            }
        }
        {
            String property = properties.getProperty("druid.url");
            if (property != null) {
                this.setUrl(property);
            }
        }
        {
            String property = properties.getProperty("druid.username");
            if (property != null) {
                this.setUsername(property);
            }
        }
    ...

这里只是举例,具体可以学习springboot自动配置原理。

五、安全

对于监控信息有必要采取安全保护,可以配置用户名跟密码、允许某些ip进行访问、拒绝某些链接进行访问等,这样对信息安全就有了一定的安全保障。
可以添加一个druid的管理页面的servlet(StatViewServlet)进行相关配置,下面介绍两种方法配置。

(1)编写配置类并注册servlet进行属性设置

配置类及注册的servlet逻辑如下:

@Configuration
public class DruidConfig {

    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
        Map<String,String> initParam = new HashMap<>();
        initParam.put("loginUsername","zrk");
        initParam.put("loginPassword","123456");
//        initParam.put("allow","");
//        initParam.put("deny","");
        
        bean.setInitParameters(initParam);
        return bean;
    }
}

重启项目,访问如下:
在这里插入图片描述
输入代码中设置的用户名密码即可

(2)直接通过配置文件进行配置

1、配置很简单直接修改配置文件即可,现在先看下原理:

查看druid的自动配置类DruidDataSourceAutoConfigure:

@Configuration
@ConditionalOnClass(DruidDataSource.class)
@AutoConfigureBefore(DataSourceAutoConfiguration.class)
@EnableConfigurationProperties({DruidStatProperties.class, DataSourceProperties.class})
@Import({DruidSpringAopConfiguration.class,
    DruidStatViewServletConfiguration.class,
    DruidWebStatFilterConfiguration.class,
    DruidFilterConfiguration.class})
public class DruidDataSourceAutoConfigure {

    private static final Logger LOGGER = LoggerFactory.getLogger(DruidDataSourceAutoConfigure.class);

    @Bean(initMethod = "init")
    @ConditionalOnMissingBean
    public DataSource dataSource() {
        LOGGER.info("Init DruidDataSource");
        return new DruidDataSourceWrapper();
    }
}

通过@Import注解引入了一些配置类,其中包括了DruidStatViewServletConfiguration.class :

@ConditionalOnWebApplication
@ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled", havingValue = "true", matchIfMissing = true)
public class DruidStatViewServletConfiguration {
    @Bean
    public ServletRegistrationBean statViewServletRegistrationBean(DruidStatProperties properties) {
        DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
        ServletRegistrationBean registrationBean = new ServletRegistrationBean();
        registrationBean.setServlet(new StatViewServlet());
        registrationBean.addUrlMappings(config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*");
        if (config.getAllow() != null) {
            registrationBean.addInitParameter("allow", config.getAllow());
        }
        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;
    }
}

分析此配置类,注册了一个servlet,其实就是druid监控页面的servlet,registrationBean.setServlet(new StatViewServlet());
相关参数取自config变量,即properties.getStatViewServlet();,是配置文件DruidStatProperties的内部类,并且配置文件绑定了以spring.datasource.druid为前缀的属性,所以在配置文件中对其属性进行配置即可。

2、配置相关属性

spring.datasource.druid.stat-view-servlet.login-username=zrk
spring.datasource.druid.stat-view-servlet.login-password=123

将原先写的配置类注释掉,重启项目访问,输入配置文件中的用户名跟密码即可登录

在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值