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的整合

 


 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值