1. 程式人生 > >SpringBoot(九):SpringBoot使用Druid資料來源

SpringBoot(九):SpringBoot使用Druid資料來源

Druid是阿里巴巴開源平臺上一個資料庫連線池實現,它結合了C3P0、DBCP、PROXOOL等DB池的優點,同時加入了日誌監控,可以很好的監控DB池連線和SQL的執行情況,可以說是針對監控而生的DB連線池(據說是目前最好的連線池)

一、依賴

為了測試,使用jdbcTemplate

<!-- jdbcTemplate -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId
>
</dependency> <!-- druid資料庫連線池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.26</version> </dependency> <!-- mysql connector --> <dependency> <groupId>mysql</groupId
>
<artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>

二、Druid配置

druid.properties

#資料庫設定
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/uu_core?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=true
spring.datasource
.username=root spring.datasource.password=root #-------------------------- # 下面為連線池的補充設定,應用到上面所有資料來源中 # 初始化大小,最小,最大 spring.datasource.initialSize=5 spring.datasource.minIdle=1 spring.datasource.maxActive=50 # 配置獲取連線等待超時的時間 spring.datasource.maxWait=60000 # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒 spring.datasource.timeBetweenEvictionRunsMillis=60000 # 配置一個連線在池中最小生存的時間,單位是毫秒 spring.datasource.minEvictableIdleTimeMillis=300000 spring.datasource.validationQuery=SELECT 1 FROM DUAL spring.datasource.testWhileIdle=true spring.datasource.testOnBorrow=false spring.datasource.testOnReturn=false # 開啟PSCache,並且指定每個連線上PSCache的大小 spring.datasource.poolPreparedStatements=false #spring.datasource.maxPoolPreparedStatementPerConnectionSize=20 # 配置監控統計攔截的filters,去掉後監控介面sql無法統計,'wall'用於防火牆 spring.datasource.filters=stat,wall,log4j # 通過connectProperties屬性來開啟mergeSql功能;慢SQL記錄 spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 合併多個DruidDataSource的監控資料 #spring.datasource.useGlobalDataSourceStat=true

三、例項化Druid Datasource

package cn.aduu.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
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 org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

/**
 * @author zh
 * @ClassName cn.aduu.config.DruidConfiguration
 * @Description
 */
@Configuration
@PropertySource(value = "classpath:druid.properties")
public class DruidConfiguration {

    @Bean(destroyMethod = "close", initMethod = "init")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druidDataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }

    /**
     * 註冊一個StatViewServlet
     * @return
     */
    @Bean
    public ServletRegistrationBean druidStatViewServlet(){
        //org.springframework.boot.context.embedded.ServletRegistrationBean提供類的進行註冊.
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");

        //新增初始化引數:initParams
        //白名單:
        servletRegistrationBean.addInitParameter("allow","127.0.0.1");
        //IP黑名單 (存在共同時,deny優先於allow) : 如果滿足deny的話提示:Sorry, you are not permitted to view this page.
        servletRegistrationBean.addInitParameter("deny","192.168.1.73");
        //登入檢視資訊的賬號密碼.
        servletRegistrationBean.addInitParameter("loginUsername","admin");
        servletRegistrationBean.addInitParameter("loginPassword","123456");
        //是否能夠重置資料.
        servletRegistrationBean.addInitParameter("resetEnable","false");
        return servletRegistrationBean;
    }

    /**
     * 註冊一個:filterRegistrationBean
     * @return
     */
    @Bean
    public FilterRegistrationBean druidStatFilter(){

        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());

        //新增過濾規則.
        filterRegistrationBean.addUrlPatterns("/*");

        //新增不需要忽略的格式資訊.
        filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}

四、監控

這裡寫圖片描述

這裡寫圖片描述

五、測試

@RestController
public class HelloController{

    private static final Logger logger = LoggerFactory.getLogger(HelloController.class);

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @RequestMapping("hello")
    public List<Map<String, Object>> hello() {
        List<Map<String, Object>> list = jdbcTemplate.queryForList("SELECT user,password FROM mysql.user ", new Object[]{});
        return list;
    }
}

訪問localhost:8080/hello

[
    {
        "user": "root",
        "password": "*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B"
    },
    {
        "user": "root",
        "password": "*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B"
    }
]

相關推薦

SpringBootSpringBoot使用Druid資料來源

Druid是阿里巴巴開源平臺上一個資料庫連線池實現,它結合了C3P0、DBCP、PROXOOL等DB池的優點,同時加入了日誌監控,可以很好的監控DB池連線和SQL的執行情況,可以說是針對監控而生的DB連線池(據說是目前最好的連線池) 一、依賴 為

springboot事物管理

SpringBoot整合事物管理    Springboot預設整合事物,只主要在方法上加上@Transactional即可。 多資料來源情況下事物怎麼管理事物    對於這種傳統的分散式事物管理,採用jta+atomikos 分散式事物管理。Atomikos 是一個為Java平臺提供增值服

SpringBootSpringBoot使用FastJson

阿里巴巴FastJson是一個Json處理工具包,包括“序列化”和“反序列化”兩部分,它具備如下特徵:  速度最快,測試表明,fastjson具有極快的效能,超越任其他的Java Json parser。包括自稱最快的JackJson;  功能強大,完全支援Java Bean

springboot整合多資料來源

資料來源是如何劃分:   按包名(業務)和註解劃分 ;例如:com.test.learn01----使用datasource1; com.test.learn02----使用datasource2。 專案目錄結構:   配置檔案中新增兩個資料來源 建立資料來源DataSource1

微服務 SpringBoot 2.0整合Mybatis

我是SQL小白,我選Mybatis —— Java面試必修 引言 在第五章我們已經整合了Thymeleaf頁面框架,第七章也整合了JdbcTemplate,那今天我們再結合資料庫整合Mybatis框架 在接下來的文章中,我會用一個開源的部落格原始碼來做講解

SpringBoot入門系列片使用自定義的屬性並配置成類

前情提要 在SpringBoot中使用application.properties默認了很多配置,有時候我們也需要到該屬性配置檔案中自定義屬性值,甚至於將一系列自定義屬性合併成一個物件,而SpringBoot中也提供了這種功能的實現,那麼現在就來試試吧

springBoot2Properties和YAML配置文件

springboot springboot的properties和yaml配置文件 一、配置文件的生效順序,會對值進行覆蓋1. @TestPropertySource 註解2. 命令行參數3. Java系統屬性(System.getProperties())4. 操作系統環境變量5. 只有在rando

springBoot4日誌配置-logback

springboot 日誌配置-logback和log4j2 一、簡介支持日誌框架:Java Util Logging, Log4J2 and Logback,默認是使用logbacklogback配置方式spring boot默認會加載classpath:logback-spring.xml或者cl

springBoot6web開發-模板引擎jsp

spring boot 一、新建工程 註意新建的工程下沒有webapp目錄eclipse下會自動創建webapp目錄這裏我們需要自動創建一個webapp目錄並創建WEB-INF。 對ServletInitializer.java進行說明 1、這個類相當於我們以前的web.xml 2、只有3.0以上才

springBoot7web開發-錯誤處理

spring boot 錯誤處理 處理方式一:實現ErrorController接口原理:Spring Boot 將所有的錯誤默認映射到/error, 實現ErrorController接口代碼:package com.example.demo.controller; import org.sp

springBoot9web開發-CORS支持

springboot springboot web開發-cors支持 一、簡介Web 開發經常會遇到跨域問題,解決方案有:jsonp,iframe,CORS 等等1.1、CORS與JSONP相比1、JSONP只能實現GET請求,而CORS支持所有類型的HTTP請求。2、使用CORS,開發者可以使用普通

springBoot12集成Druid

springboot 集成druid 一、添加依賴<!--mybatis-開始--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>myba

springBoot14使用SQL關系型數據庫-事務處理

springboot springboot事務處理 一、事務的四個特性(ACID)原子性(Atomicity): 事務是一個原子操作,由一系列動作組成。事務的原子性確保動作要麽全部完成,要麽完全不起作用。一致性(Consistency): 一旦事務完成(不管成功還是失敗),系統必須確保它所建模的業務處

springBoot15集成Swagger

springboot 集成swagger 一、簡介Swagger 是一個規範和完整的框架,用於生成、描述、調用和可視化 RESTful 風格的 Web 服務。http://swagger.io/ Springfox 的前身是swagger-springmvc,是一個開源的API doc框架,可以將我們

springBoot16集成redis

springboot 集成redis 一、簡介redis是一種可以持久存儲的緩存系統,是一個高性能的key-value數據庫。二、使用2.1、添加依賴<dependency> <groupId>org.springframework.boot</groupId>

springBoot18多賬號輪詢發送郵件

spring boot 多賬號 一、添加依賴<!-- mail --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-b

springBoot23spring-security-

spring boot 安全 一、簡介Web應用的安全管理,主要包括兩個方面的內容:身份認證、用戶授權,此處使用spring-cloud-security來說明。二、依賴管理<dependency> <groupId>org.springframework.clou

TypeScript學習筆記裝飾器Decorators

標註 時裝 als cal () 操作 enume 筆記 文檔 裝飾器簡介 裝飾器(Decorators)為我們在類的聲明及成員上通過元編程語法添加標註提供了一種方式。 需要註意的是:裝飾器是一項實驗性特性,在未來的版本中可能會發生改變。 若要啟用實驗性的裝飾器特性

Java-NIO管道 (Pipe)

png bsp java nio pri java-nio ges 線程 pre logs Java NIO 管道是2個線程之間的單向數據連接。Pipe有一個source通道和一個sink通道。數據會被寫到sink通道,從source通道讀取。 代碼使用示例:

CUDA實例練習頁鎖定主機內存

png blog 分配 pydev art event http tdi dev malloc()分配的內存與cudaHostAlloc()分配的內存之間存在著一個重要差異。C庫函數malloc()將分配標準的,可分頁的(Pagable)主機內存,而cudaHo