SpringBoot從入門到精通03-數據源

前言

Springboot默認支持3種數據源類型,定義在 org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration 中,分別是:
org.apache.tomcat.jdbc.pool.DataSource(1.x版本默認)
com.zaxxer.hikari.HikariDataSource(2.x版本默認)
org.apache.commons.dbcp2.BasicDataSource
  對於這3種數據源,當 classpath 下有相應的類存在時,Springboot 會通過自動配置爲其生成DataSource Bean,DataSource Bean默認只會生成一個,三種數據源類型的生效先後順序如下:Tomcat -> Hikari -> Dbcp2 。


 1、默認配置:

  

默認yaml配置  不指定數據源

spring:

 datasource:

  username:root

  password:root

  url:jdbc:mysql://localhost:3306/test

  driver-class-name:com.mysql.jdbc.Driver

將使用springboot默認的數據源

位置:org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration

默認以下三種數據源

org.apache.tomcat.jdbc.pool.DataSource

com.zaxxer.hikari.HikariDataSource

org.apache.commons.dbcp2.BasicDataSource

2、自定義數據源類型

源碼如下

    /**
	 * Generic DataSource configuration.
	 */
	@ConditionalOnMissingBean(DataSource.class)
	@ConditionalOnProperty(name = "spring.datasource.type")
	static class Generic {
		@Bean
		public DataSource dataSource(DataSourceProperties properties) {
			return properties.initializeDataSourceBuilder().build();
		}

	}

因此  我們只需要在配置文件中spring.datasource下指定type即可

接下來演示自定義數據源類型爲Druid


 

3、整合Druid數據源

首先引入依賴

<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.14</version>
</dependency>

當然這裏可以直接引入druid-spring-boot-starter但爲了解其原理 這裏直接引入非starter的依賴

1) 初始化一個我們自己的數據源

@Configuration
publicclassDruidConfig{

    @Bean
    @ConfigurationProperties(prefix="spring.datasource")
    public DataSource druidDataSource(){
        return new DruidDataSource();
    }
    
    //配置druid監控訪問的servlet
    @Bean
    public ServletRegistration BeanduridServlet(){
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
    Map<String,String>map=newHashMap<>();
    map.put("loginUsername","admin");
    map.put("loginPassword","admin");
    servletRegistrationBean.setInitParameters(map);
    returnservletRegistrationBean;
}

    //配置druid監控的filter
    @Bean
    publicFilterRegistrationBeandruidFlilter(){
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
    filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
    Map<String,String>stringStringMap=newHashMap<>();
    stringStringMap.put("exclusions","*.js,*.html,*.css,/druid/*");
    filterRegistrationBean.setInitParameters(stringStringMap);
    returnfilterRegistrationBean;
    }
}

這裏初始化了一個我們自己的數據源 配置使用spring.datasource開頭的配置  並初始化了druid專用的Servlet和Filter

下面我們寫配置項  如下:

spring: 
    datasource: 
        username: root
        password: root
        url: jdbc:mysql://localhost:3306/test
        driver-class-name: com.mysql.jdbc.Driver
        常用配置:
        type: com.alibaba.druid.pool.DruidDataSource
        #常用屬性配置以下配置默認綁定不到druid上面我們需要新建一個配置類返回druidDataSource實例指定爲使用配置文件配置才行
        initialSize: 5
        minIdle: 5
        maxActive: 20
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT1FROMDUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        #配置監控統計攔截的filters,去掉後監控界面sql無法統計,'wall'用於防火牆
        filters: stat,wall
        maxPoolPreparedStatementPerConnectionSize: 20
        useGlobalDataSourceStat: true
        connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

這樣我們就完成了druid的整合

 


 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章