Springboot專案引入druid安裝部署使用

遠離顛倒夢想發表於2022-01-06

一、maven引入依賴,資料庫驅動根據專案需求自行引入

        <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.6</version>
        </dependency>

二、配置datasource

spring:
  datasource:
      url: jdbc:mysql://192.168.199.100:33306/auto?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull
      username: root
      password: 123456
      driver-class-name: com.mysql.cj.jdbc.Driver
      type: com.alibaba.druid.pool.DruidDataSource
      initial-size: 1
      min-idle: 1
      max-active: 10
      max-wait: 60000
      #配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒
      time-between-eviction-runs-millis: 60000
      #配置一個連線在池中最小生存的時間,單位是毫秒
      min-evictable-idle-time-millis: 30000
      durid:
      #配置監控統計攔截的filters,stat:監控統計、log4j:日誌記錄、wall:防禦sql注入
        filters: wall,stat,log4j

三、注入druid配置

@SpringBootConfiguration
public class DruidConfig {
    
    //將自定義的 Druid資料來源新增到容器中,不再讓 Spring Boot 自動建立
    //繫結全域性配置檔案中的 druid 資料來源屬性到 com.alibaba.druid.pool.DruidDataSource從而讓它們生效
    //@ConfigurationProperties(prefix = "spring.datasource"):作用就是將 全域性配置檔案中
    //字首為 spring.datasource的屬性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名引數中
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }

    //配置 Druid 監控管理後臺的Servlet;
    //內建 Servlet 容器時沒有web.xml檔案,所以使用 Spring Boot 的註冊 Servlet 方式
    @Bean
    public ServletRegistrationBean registrationBean() {
        ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
        Map<String, String> initParameters = new HashMap<>();
        initParameters.put("loginUsername", "admin");
        initParameters.put("loginPassword", "12345");
        bean.setInitParameters(initParameters);
        return bean;
    }

    //配置 Druid 監控 之  web 監控的 filter
    //WebStatFilter:用於配置Web和Druid資料來源之間的管理關聯監控統計
    @Bean
    public FilterRegistrationBean webStatFilter() {
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());
        //exclusions:設定哪些請求進行過濾排除掉,從而不進行統計
        Map<String, String> initParams = new HashMap<>();
        initParams.put("exclusions", "*.js,*.css,/druid/*,/jdbc/*");
        bean.setInitParameters(initParams);
        //"/*" 表示過濾所有請求
        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;
    }

    /**
     * 去除Druid監控頁面的廣告
     */
    @Bean
    public FilterRegistrationBean removeDruidAdFilter() throws IOException {
        String text = Utils.readFromResource("support/http/resources/js/common.js");
        final String newJs = text.replace("this.buildFooter();", "");
        // 新建一個過濾器註冊器物件
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
        // 註冊common.js檔案的過濾器
        registration.addUrlPatterns("/druid/js/common.js");
        // 新增一個匿名的過濾器物件,並把改造過的common.js檔案內容寫入到瀏覽器
        registration.setFilter((servletRequest, servletResponse, filterChain) -> {
            // 重置緩衝區,響應頭不會被重置
            servletResponse.resetBuffer();
            // 把改造過的common.js檔案內容寫入到瀏覽器
            servletResponse.getWriter().write(newJs);
        });
        return registration;
    }
}

四、測試 druid 資料來源是否啟用

@SpringBootTest(classes = AutoApplication.class)
public class DuridTest {
    //DI注入資料來源
    @Autowired
    private DataSource dataSource;
    @Test
    public void contextLoads() throws SQLException {
        //看一下預設資料來源
        System.out.println(dataSource.getClass());
        //獲得連線
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        DruidDataSource druidDataSource = (DruidDataSource) dataSource;
        System.out.println("druidDataSource 資料來源最大連線數:" + druidDataSource.getMaxActive());
        System.out.println("druidDataSource 資料來源初始化連線數:" + druidDataSource.getInitialSize());
        //關閉連線
        connection.close();
    }
}

五、登陸druid後臺控制檯,使用者名稱及密碼在 DruidConfig 配置中 

127.0.0.1:65000/druid/login.html

 

相關文章