SpringBoot整合Druid

ゝ一世哀愁。 2022-03-27 02:23 441阅读 0赞

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

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

一、引入druid的起步依赖

  1. <!--druid-->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>druid-spring-boot-starter</artifactId>
  5. <version>1.1.10</version>
  6. </dependency>

二、设置druid相关配置

  1. # datasource
  2. #spring.datasource.url=jdbc:mysql://127.0.0.1:3306/zrk?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
  3. #spring.datasource.username=root
  4. #spring.datasource.password=root
  5. #spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  6. # druid
  7. spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/zrk?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
  8. spring.datasource.druid.username=root
  9. spring.datasource.druid.password=root
  10. spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
  11. spring.datasource.druid.filters=stat
  12. spring.datasource.druid.maxActive=20
  13. spring.datasource.druid.initialSize=10
  14. spring.datasource.druid.maxWait=60000
  15. spring.datasource.druid.minIdle=1
  16. spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
  17. spring.datasource.druid.minEvictableIdleTimeMillis=300000
  18. spring.datasource.druid.testWhileIdle=true
  19. spring.datasource.druid.testOnBorrow=true
  20. spring.datasource.druid.testOnReturn=false
  21. spring.datasource.druid.poolPreparedStatements=true
  22. spring.datasource.druid.maxOpenPreparedStatements=20
  23. 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类

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

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

  1. public void configFromPropety(Properties properties) {
  2. {
  3. String property = properties.getProperty("druid.name");
  4. if (property != null) {
  5. this.setName(property);
  6. }
  7. }
  8. {
  9. String property = properties.getProperty("druid.url");
  10. if (property != null) {
  11. this.setUrl(property);
  12. }
  13. }
  14. {
  15. String property = properties.getProperty("druid.username");
  16. if (property != null) {
  17. this.setUsername(property);
  18. }
  19. }
  20. ...

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

五、安全

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

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

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

  1. @Configuration
  2. public class DruidConfig {
  3. @Bean
  4. public ServletRegistrationBean statViewServlet(){
  5. ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
  6. Map<String,String> initParam = new HashMap<>();
  7. initParam.put("loginUsername","zrk");
  8. initParam.put("loginPassword","123456");
  9. // initParam.put("allow","");
  10. // initParam.put("deny","");
  11. bean.setInitParameters(initParam);
  12. return bean;
  13. }
  14. }

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

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

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

查看druid的自动配置类DruidDataSourceAutoConfigure:

  1. @Configuration
  2. @ConditionalOnClass(DruidDataSource.class)
  3. @AutoConfigureBefore(DataSourceAutoConfiguration.class)
  4. @EnableConfigurationProperties({ DruidStatProperties.class, DataSourceProperties.class})
  5. @Import({ DruidSpringAopConfiguration.class,
  6. DruidStatViewServletConfiguration.class,
  7. DruidWebStatFilterConfiguration.class,
  8. DruidFilterConfiguration.class})
  9. public class DruidDataSourceAutoConfigure {
  10. private static final Logger LOGGER = LoggerFactory.getLogger(DruidDataSourceAutoConfigure.class);
  11. @Bean(initMethod = "init")
  12. @ConditionalOnMissingBean
  13. public DataSource dataSource() {
  14. LOGGER.info("Init DruidDataSource");
  15. return new DruidDataSourceWrapper();
  16. }
  17. }

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

  1. @ConditionalOnWebApplication
  2. @ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled", havingValue = "true", matchIfMissing = true)
  3. public class DruidStatViewServletConfiguration {
  4. @Bean
  5. public ServletRegistrationBean statViewServletRegistrationBean(DruidStatProperties properties) {
  6. DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
  7. ServletRegistrationBean registrationBean = new ServletRegistrationBean();
  8. registrationBean.setServlet(new StatViewServlet());
  9. registrationBean.addUrlMappings(config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*");
  10. if (config.getAllow() != null) {
  11. registrationBean.addInitParameter("allow", config.getAllow());
  12. }
  13. if (config.getDeny() != null) {
  14. registrationBean.addInitParameter("deny", config.getDeny());
  15. }
  16. if (config.getLoginUsername() != null) {
  17. registrationBean.addInitParameter("loginUsername", config.getLoginUsername());
  18. }
  19. if (config.getLoginPassword() != null) {
  20. registrationBean.addInitParameter("loginPassword", config.getLoginPassword());
  21. }
  22. if (config.getResetEnable() != null) {
  23. registrationBean.addInitParameter("resetEnable", config.getResetEnable());
  24. }
  25. return registrationBean;
  26. }
  27. }

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

2、配置相关属性

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

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

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

发表评论

表情:
评论列表 (有 0 条评论,441人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringBoot整合Druid

    SpringBoot整合Druid 简介:Druid是阿里巴巴提供的数据库连接池,文本讲解SpringBoot整合Druid。 创建项目 ![在这里插入图片描述]

    相关 Springboot 整合 Druid

    Druid( [阿里巴巴开源项目 Druid][Druid])首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件