• SpringBoot-Druid


    目录

    1.什么是Druid

    2.主要优点和原因

    3.误区

    4.Part代码

    0.pom

    1.Spring.datasource.type: com.alibaba.druid.pool.DruidDataSource

    2.Druid用Jasypt加密任意内容

    @EnableEncryptableProperties开启加密注解

    3.Druid监控平台


    1.什么是Druid

    Druid 是一个开源的数据库连接池和监控库,主要用于连接和管理数据库连接。它的设计目标是提供高性能、高可用性、高度可管理性的数据库连接池,适用于各种Java应用程序,特别是那些需要频繁与数据库交互的应用,如Web应用、大数据处理等。

    2.主要优点和原因

    1. 连接池管理 Druid 提供了强大的连接池管理功能,可以有效地管理数据库连接的创建、销毁、复用和监控,以减少数据库连接的开销和资源浪费。

    2. 性能优化: Druid 在连接池和 SQL 执行层面进行了性能优化,包括支持预编译语句、自动识别并关闭空闲连接、连接泄漏检测等功能,以提高应用程序的性能。

    3. 监控和统计 Druid 提供了详细的监控和统计信息,包括连接池的状态、SQL执行性能、慢查询日志等,帮助开发人员和运维人员更好地理解应用的数据库访问情况,及时发现性能问题。

    4. 安全性: Druid 支持 IP 白名单、SQL 防火墙等安全功能,可以保护数据库免受恶意攻击。

    5. 适用性广泛: Druid 不仅支持 JDBC,还支持类似Spring JDBC、MyBatis、Hibernate等框架,因此适用于各种Java应用程序。

    6. 开源和活跃的社区: Druid 是开源项目,拥有活跃的社区支持,可以获得及时的更新和 bug 修复。

    7. 可扩展性: Druid 具有可扩展性,可以根据具体需求进行定制和扩展,以满足特定应用场景的要求。

    总之,使用 Druid 数据库连接池的主要目的是提高数据库访问的性能、可管理性和安全性,同时提供了丰富的监控和统计信息,有助于更好地管理和维护数据库连接。当你的应用需要频繁与数据库交互时,使用 Druid 可能会显著提高应用程序的性能和可维护性。

    3.误区

    Druid本身不提供SQL优化功能,SQL优化通常需要依赖于数据库引擎或其他专门的SQL优化工具。可以在使用Druid连接池的应用中采取一些措施来优化SQL查询的性能;

    4.Part代码

    JDBC默认的DataSource实现是BasicDataSourceBasicDataSource是一个开源的、基本的DataSource实现,用于创建和管理数据库连接池。

    因为使用连接池可以显著提高数据库连接的性能和资源利用率,减少连接的创建和销毁开销。

    0.pom

    1. <!--jasypt坐标-->
    2. <dependency>
    3. <groupId>com.github.ulisesbocchio</groupId>
    4. <artifactId>jasypt-spring-boot-starter</artifactId>
    5. <version>2.1.0</version>
    6. </dependency>
    7. <!--druid坐标-->
    8. <dependency>
    9. <groupId>com.alibaba</groupId>
    10. <artifactId>druid-spring-boot-starter</artifactId>
    11. <version>1.2.8</version>
    12. </dependency>

    1.Spring.datasource.type: com.alibaba.druid.pool.DruidDataSource

    System.out.println(dataSource.getClass());
    System.out.println(dataSource.getConnection());

    class com.alibaba.druid.pool.DruidDataSource
    com.mysql.cj.jdbc.ConnectionImpl@32d5279

     可以看到数据源已经成功切换

    2.Druid用Jasypt加密任意内容

    生成密码的密文代码

    1. @Test
    2. void show1(){
    3. StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
    4. EnvironmentPBEConfig config = new EnvironmentPBEConfig();
    5. // 加密的算法,这个算法是默认的
    6. config.setAlgorithm("PBEWithMD5AndDES");
    7. // 加密的密钥,随便自己填写,很重要千万不要告诉别人
    8. config.setPassword("apesource");
    9. standardPBEStringEncryptor.setConfig(config);
    10. //自己的密码
    11. String plainText = "xxx";
    12. String encryptedText = standardPBEStringEncryptor.encrypt(plainText);
    13. System.out.println(encryptedText);
    14. }

     使密文生效我们使用了ENC函数,并将混淆字符串的配置放到了yml当中

    jasypt:
      encryptor:
        password: apesource

    yml当中的格式

    1. spring.datasource.url=jdbc:mysql://localhost:3306/mydb
    2. spring.datasource.username=myUsername
    3. spring.datasource.password=ENC(密文)

    @EnableEncryptableProperties开启加密注解

    3.Druid监控平台

    yml当中

    filters: stat,wall

    在Config配置类当中

    1. 2.配置servlet
    2. @Bean
    3. public ServletRegistrationBean registrationBean(){
    4. //1.创建servlet注册类
    5. ServletRegistrationBean<StatViewServlet> servletRegistrationBean = new ServletRegistrationBean<StatViewServlet>();
    6. //2.创建制作页面的servlet
    7. StatViewServlet statViewServlet = new StatViewServlet();
    8. //3.绑定servlet
    9. servletRegistrationBean.setServlet(statViewServlet);
    10. servletRegistrationBean.setUrlMappings(Arrays.asList("/druid/*"));
    11. //4.参数绑定
    12. Map<String,String> maps = new HashMap<String,String>();
    13. maps.put(StatViewServlet.PARAM_NAME_USERNAME,"admin");
    14. maps.put(StatViewServlet.PARAM_NAME_PASSWORD,"123");
    15. maps.put(StatViewServlet.PARAM_NAME_ALLOW,"");//白名单
    16. maps.put(StatViewServlet.PARAM_NAME_DENY,"192.168.0.12");//黑名单
    17. servletRegistrationBean.setInitParameters(maps);
    18. return servletRegistrationBean;
    19. }
    20. //3.配置filter
    21. @Bean
    22. public FilterRegistrationBean filterRegistrationBean(){
    23. FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<WebStatFilter>();
    24. bean.setFilter(new WebStatFilter());
    25. //所有请求进行监控处理
    26. bean.setUrlPatterns(Arrays.asList("/*"));
    27. Map<String, String> initPrams = new HashMap<>();
    28. //添加不需要忽略的格式信息
    29. initPrams.put(WebStatFilter.PARAM_NAME_EXCLUSIONS, "*.js,*.css,/druid/*");
    30. bean.setInitParameters(initPrams);
    31. return bean;
    32. }

    拦截器和过滤器用到了servlet,所以要注册servlet

    拦截器主要拦截以/druid/开头的

    最后使用localhost://8080/就可以访问监控平台。

  • 相关阅读:
    极简极速-Bitset (bitmap)实现考勤打卡场景
    微信小程序|进度条
    画图实战-Python实现某产品全年销量数据多种样式可视化
    测开系列Selenium Webdriver Python(21)--元素定位2
    闭包(C#)
    第20章 使用Spring进行事务管理(二)
    中小学科一模板
    大华智慧园区前台任意文件上传(1day)
    第一章-新手上路
    新版Chromedriver在哪下载(Chromedriver 116.0.5845.188的寻找之旅)
  • 原文地址:https://blog.csdn.net/weixin_51704612/article/details/133281122