SpringBoot数据访问

242 阅读1分钟

SpringBoot 配置文件

spring:
  datasource:
    username: kidjoker
    password: 0okm(IJN123
    url: jdbc:mysql://104.168.159.218:63306/springbootdemo
    driver-class-name: com.mysql.cj.jdbc.Driver
  • 效果

    • 使用com.zaxxer.hikari.HikariDataSource作为数据源
    • 数据源相关配置都在DataSourceProperties里面
  • 数据源自动配置原理——org.springframework.boot.autoconfigure.jdbc

    1. 参考DataSourceConfiguration,根据配置创建数据源,使用spring.datasource.type指定自定义的数据源

    2. SpringBoot默认支持的数据源:

    • org.apache.commons.dbcp2.BasicDataSource
      com.zaxxer.hikari.HikariDataSource
      org.apache.tomcat.jdbc.pool.DataSource
      
    1. 自定义数据源

      • 比如 type:com.alibaba.druid.pool.DruidDataSource
        
      • @ConditionalOnMissingBean({DataSource.class})
            @ConditionalOnProperty(
                name = {"spring.datasource.type"}
            )
            static class Generic {
                Generic() {
                }
        
                @Bean
                DataSource dataSource(DataSourceProperties properties) {
                    return properties.initializeDataSourceBuilder().build();
                }
            }
        
      • public DataSourceBuilder<?> initializeDataSourceBuilder() {
          			//通过责任链模式设置属性
                return DataSourceBuilder.create(this.getClassLoader())
                  											.type(this.getType())
                  											.driverClassName(this.determineDriverClassName())
                  											.url(this.determineUrl())
                  											.username(this.determineUsername())
                  											.password(this.determinePassword());
            }
        
      • public T build() {
          			//获取class的类型
                Class<? extends DataSource> type = this.getType();
          			//利用反射创建type的数据源
                DataSource result = (DataSource)BeanUtils.instantiateClass(type);
                this.maybeGetDriverClassName();
          			//绑定相关属性
                this.bind(result);
                return result;
            }
        
    2. DataSourceInitializer:ApplicationListener

      • 作用

      • 运行建表语句

      • 运行插入数据的语句

        • schema-*.sql
          data-*.sql
          默认规则:schema.sql,schema-all.sql
          自定义规则:
          				schema:
          						- classpath:xxxx.sql
          
    3. 操作数据库:自动配置了jdbcTemplate操作

  • 遇到问题

    Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'
    
    • 因为老的jdbc驱动不支持