admin 1 year ago
parent
commit
70b76c02cf

+ 77 - 0
myBatisSpringBoot/src/main/java/org/example/DruidAdConfig.java

@@ -0,0 +1,77 @@
+package org.example;
+
+import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
+import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
+import com.alibaba.druid.util.Utils;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.servlet.*;
+import java.io.IOException;
+
+/**
+ * Druid广告配置
+ *
+ * @author zzp
+ */
+@Configuration
+@ConditionalOnWebApplication
+@AutoConfigureAfter(DruidDataSourceAutoConfigure.class)
+@ConditionalOnProperty(
+        name = "spring.datasource.druid.stat-view-servlet.enabled",
+        havingValue = "true",
+        matchIfMissing = true)
+public class DruidAdConfig {
+
+    /**
+     * 去除监控页面底部广告
+     *
+     * @param properties
+     * @return org.springframework.boot.web.servlet.FilterRegistrationBean
+     */
+    @Bean
+    public FilterRegistrationBean removeDruidAdFilterRegistrationBean(
+            DruidStatProperties properties) {
+        // 获取web监控页面的参数
+        DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
+        // 提取common.js的配置路径
+        String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";
+        String commonJsPattern = pattern.replaceAll("\\*", "js/common.js");
+
+        final String filePath = "support/http/resources/js/common.js";
+
+        // 创建filter进行过滤
+        Filter filter =
+                new Filter() {
+                    @Override
+                    public void init(FilterConfig filterConfig) throws ServletException {}
+
+                    @Override
+                    public void doFilter(
+                            ServletRequest request, ServletResponse response, FilterChain chain)
+                            throws IOException, ServletException {
+                        chain.doFilter(request, response);
+                        // 重置缓冲区,响应头不会被重置
+                        response.resetBuffer();
+                        // 获取common.js
+                        String text = Utils.readFromResource(filePath);
+                        // 正则替换banner, 除去底部的广告信息
+                        text = text.replaceAll("<a.*?banner\"></a><br/>", "");
+                        text = text.replaceAll("powered.*?shrek.wang</a>", "");
+                        response.getWriter().write(text);
+                    }
+
+                    @Override
+                    public void destroy() {}
+                };
+        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
+        registrationBean.setFilter(filter);
+        registrationBean.addUrlPatterns(commonJsPattern);
+        return registrationBean;
+    }
+}
+

+ 16 - 0
myBatisSpringBoot/src/main/java/org/example/DruidStatController.java

@@ -0,0 +1,16 @@
+package org.example;
+
+import com.alibaba.druid.stat.DruidStatManagerFacade;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class DruidStatController {
+
+    @GetMapping("/druidStat")
+    public Object druidStat(){
+        // DruidStatManagerFacade#getDataSourceStatDataList 该方法可以获取所有数据源的监控数据,
+        // 除此之外 DruidStatManagerFacade 还提供了一些其他方法,你可以按需选择使用。
+        return DruidStatManagerFacade.getInstance().getDataSourceStatDataList();
+    }
+}

+ 48 - 0
myBatisSpringBoot/src/test/java/org/example/Tests.java

@@ -0,0 +1,48 @@
+package org.example;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+
+@SpringBootTest(classes = Main.class)
+class Tests {
+
+    @Autowired
+    DataSource dataSource;
+
+    /**
+     * 验证数据库连接
+     * @throws Exception
+     */
+    @Test
+    void testConnection() throws Exception {
+        // 默认:class com.zaxxer.hikari.HikariDataSource
+        // Druid:class com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper
+        System.out.println(dataSource.getClass());
+        Connection connection = dataSource.getConnection();
+        // 默认:HikariProxyConnection@1323996324 wrapping com.mysql.cj.jdbc.ConnectionImpl@7c281eb8
+        // Druid:com.mysql.cj.jdbc.ConnectionImpl@3166f664
+        System.out.println(connection);
+        connection.close();
+    }
+
+    /**
+     * 验证连接池的配置信息,是否生效
+     * @throws Exception
+     */
+    @Test
+    void contextLoads() throws Exception {
+        System.out.println(dataSource.getClass());
+        DruidDataSource druidDataSource = (DruidDataSource) dataSource;
+        System.out.println("initSize:" + druidDataSource.getInitialSize());
+        System.out.println("maxSize:" + druidDataSource.getMaxActive());
+        Connection connection = dataSource.getConnection();
+        System.out.println(connection);
+        connection.close();
+    }
+
+}