日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot_数据访问-整合Druid配置数据源监控

發布時間:2024/4/13 javascript 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot_数据访问-整合Druid配置数据源监控 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
然后實際在開發的時候,我們很少用到這個數據源,比如我們用c3p0,或者開發常用的druid,這是我們阿里的數據源產品,雖然Hikarui的性能比druid要好一點,由于druid有安全監控的整個解決方案,所以我們后來開發中用到他也非常多,那我們接下來就整合duid數據源,我們不用他默認的

首先我們要引入druid數據源,我們從maven倉庫里找到他的坐標,https://mvnrepository.com/search?q=druid<!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.18</version> </dependency>我們先引入我們自定義的數據源,引入druid數據源,可以用type來指定數據源的類型,spring.datasource.type=com.alibaba.druid.pool.DruidDataSource我們指定成他,這樣數據源就切換過來了,我們看數據源能不能切成druid的呢,我們來運行,我們來看一下,數據源已經變了,class com.alibaba.druid.pool.DruidDataSource #debug=true #server.port=8081#server.context-path=/boot02spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true spring.http.encoding.force=truelogging.level.com.learn=trace #logging.file=D:/springboot.log logging.file=springboot.log #logging.path=/spring/log logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n logging.pattern.file=%d{yyyy-MM-dd} ==== [%thread] %-5level ==== %logger{50} ==== %msg%n #spring.resources.static-locations=classpath:/hello,classpath:/learnspring.datasource.username=root spring.datasource.password=123456 spring.datasource.url=jdbc:mysql://localhost:3306/day20 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.type=com.alibaba.druid.pool.DruidDataSource package com.learn.springboot;import java.sql.Connection; import java.sql.SQLException;import javax.sql.DataSource;import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner;/*** SpringBoot單元測試*/ @RunWith(SpringRunner.class) @SpringBootTest public class SpringBootDataJDBCApplicationTests {@AutowiredDataSource dataSource;@Testpublic void contextLoads() throws SQLException {// org.apache.tomcat.jdbc.pool.DataSourceSystem.out.println(dataSource.getClass());Connection connection = dataSource.getConnection();System.out.println(connection);connection.close();} } 但是數據源會有很多的屬性設置,比如druid,初始化連接池大小,等等配置,那我們配置在哪呢,那么多的屬性我就不一個一個寫了,initialSize是初始化大小,我們在DataSourceProperties里邊,并沒有相關的屬性,所以我們后邊設置的這些,并不能綁定到數據庫的配置里邊,那這寫配置默認是不起作用的,我們自己來寫一個DruidConfig,專門來配我們的druid,它是一個@Configuration,我們來創建一個數據源,并且加載容器中,但是我們要將屬性綁定上,之前默認是綁定不上的,我們只需要用一個熟悉的注解,我們把以"spring.datasource"為前綴的綁定進來,那我再來debug測試,#連接池的配置信息 spring.datasource.initialSize=5 spring.datasource.minIdle=5 spring.datasource.maxActive=20 spring.datasource.maxWait=60000 package com.learn.config;import javax.sql.DataSource;import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;import com.alibaba.druid.pool.DruidDataSource;@Configuration public class DruidConfig {@ConfigurationProperties(prefix="spring.datasource")@Beanpublic DataSource druid() {return new DruidDataSource();}} package com.learn.springboot;import java.sql.Connection; import java.sql.SQLException;import javax.sql.DataSource;import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner;/*** SpringBoot單元測試*/ @RunWith(SpringRunner.class) @SpringBootTest public class SpringBootDataJDBCApplicationTests {@AutowiredDataSource dataSource;@Testpublic void contextLoads() throws SQLException {// org.apache.tomcat.jdbc.pool.DataSourceSystem.out.println(dataSource.getClass());Connection connection = dataSource.getConnection();System.out.println(connection);connection.close();} } 這樣我們的屬性就用上了,接下來我們來配置監控,讓他的的監控也能起到作用,這個怎么配置呢,其實與以前用過的一樣,他需要配置一個servlet,我們進入管理后臺的請求,然后再來配置一個監控的filter,我們得配上兩個這個東西,我們沒有web.xml,如果要注冊servlet,就用ServletRegistrationBean,那么這個servlet叫什么呢,StatViewServlet,幫我們監控管理后臺的servlet,我們就來配他,我們new一個ServletRegistrationBean,然后把我們的servlet傳進去,然后還要傳入一個urlMapping,我們處理druid下的所有請求,我們把servlet加入容器中,我們一般也會配置一些初始化參數,比如這個servlet能配置這些參數/*** 注意:避免直接調用Druid相關對象例如DruidDataSource等,相關調用要到DruidStatManagerFacade里用反射實現* * @author sandzhang[sandzhangtoo@gmail.com]*/ public class StatViewServlet extends ResourceServlet {private final static Log LOG = LogFactory.getLog(StatViewServlet.class);private static final long serialVersionUID = 1L;public static final String PARAM_NAME_RESET_ENABLE = "resetEnable";public static final String PARAM_NAME_JMX_URL = "jmxUrl";public static final String PARAM_NAME_JMX_USERNAME = "jmxUsername";public static final String PARAM_NAME_JMX_PASSWORD = "jmxPassword";@SuppressWarnings("serial") public abstract class ResourceServlet extends HttpServlet {private final static Log LOG = LogFactory.getLog(ResourceServlet.class);public static final String SESSION_USER_KEY = "druid-user";public static final String PARAM_NAME_USERNAME = "loginUsername";public static final String PARAM_NAME_PASSWORD = "loginPassword";public static final String PARAM_NAME_ALLOW = "allow";public static final String PARAM_NAME_DENY = "deny";public static final String PARAM_REMOTE_ADDR = "remoteAddress";初始化參數怎么配呢,allow不寫就是默認允許所有,我來配置一個deny來拒絕,拒絕這個ip地址來訪問,注冊filter需要FilterRegistrationBean,我們這個filter叫WebStatFilter,就來注冊他,/*** 用于配置Web和Druid數據源之間的管理關聯監控統計* * @author wenshao [szujobs@htomail.com]* @author Zhangming Qi [qizhanming@gmail.com]*/ public class WebStatFilter extends AbstractWebStatImpl implements Filter {private final static Log LOG = LogFactory.getLog(WebStatFilter.class);public final static String PARAM_NAME_PROFILE_ENABLE = "profileEnable";public final static String PARAM_NAME_SESSION_STAT_ENABLE = "sessionStatEnable";public final static String PARAM_NAME_SESSION_STAT_MAX_COUNT = "sessionStatMaxCount";public static final String PARAM_NAME_EXCLUSIONS = "exclusions";public static final String PARAM_NAME_PRINCIPAL_SESSION_NAME = "principalSessionName";public static final String PARAM_NAME_PRINCIPAL_COOKIE_NAME = "principalCookieName";public static final String PARAM_NAME_REAL_IP_HEADER = "realIpHeader";我們看能不能來到druid的管理后臺localhost:8080/druid按照我們指定的用戶名和密碼,還有WEB應用的數據監控,我們配了web filter,都能監控到WEB應用的相關信息,我們就來發一個請求,localhost:8080/query來查詢數據的請求,這個數據就算是查出來了,包括來到我們的后臺,還可以看到SQL監控,JDBC執行次數,執行的時間,druid就配置成功了 package com.learn.config;import java.util.Arrays; import java.util.HashMap; import java.util.Map;import javax.sql.DataSource;import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter;@Configuration public class DruidConfig {@ConfigurationProperties(prefix="spring.datasource")@Beanpublic DataSource druid() {return new DruidDataSource();}// 配置Druid的監控// 1.配置一個管理后臺的Servlet// 2.配置一個監控的Filter@Beanpublic ServletRegistrationBean statViewServlet() {ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");Map<String,String> initParams = new HashMap<String,String>();initParams.put("loginUsername", "admin");initParams.put("loginPassword", "123456");initParams.put("allow", "");initParams.put("deny", "192.168.15.21");// 默認就是允許所有訪問bean.setInitParameters(initParams);return bean;}// 2.配置一個web監控的filter@Beanpublic FilterRegistrationBean webStatFilter() {FilterRegistrationBean bean = new FilterRegistrationBean();bean.setFilter(new WebStatFilter());Map<String,String> initParams = new HashMap<String,String>(); initParams.put("exclusions", "*.js,*.css,/druid/*");bean.setInitParameters(initParams);bean.setUrlPatterns(Arrays.asList("/*"));return bean;} }

?

總結

以上是生活随笔為你收集整理的SpringBoot_数据访问-整合Druid配置数据源监控的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。