一、SpringBoot 访问JDBC原理

  我们可以参考源代码:SpringBoot2中默认的数据源是使用HikariDataSource

  1. /**
  2. * Hikari DataSource configuration.
  3. */
  4. @ConditionalOnClass(HikariDataSource.class)
  5. @ConditionalOnMissingBean(DataSource.class)
  6. @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.zaxxer.hikari.HikariDataSource", matchIfMissing = true)

  同时可以支持其他类型的数据源: 

  1. org.apache.tomcat.jdbc.pool.DataSource  
  1. "com.zaxxer.hikari.HikariDataSource"  
  1. org.apache.commons.dbcp2.BasicDataSource

  对于其他公司如阿里巴巴的druid数据源,通过查看源码,可以自行在配置文件中配置

  1. /**
  2. * Generic DataSource configuration. 通过数据源配置
  3. */
  4. @ConditionalOnMissingBean(DataSource.class)
  5. @ConditionalOnProperty(name = "spring.datasource.type")
  6. static class Generic {
  7.  
  8. @Bean
  9. public DataSource dataSource(DataSourceProperties properties) {
  10. return properties.initializeDataSourceBuilder().build();
  11. }
  12.  
  13. }
  14.  
  15. application.xml|.yml中添加如下配置:

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource

  1.  

  

  1.关于SpringBoot自动建表、执行Sql语句

  通过查看DataSourceInitializer这个类源代码:

  

  1. /**  建表结构
  2. * Create the schema if necessary.
  3. * @return {@code true} if the schema was created
  4. * @see DataSourceProperties#getSchema()
  5. */
  6. public boolean createSchema() {
  7. List<Resource> scripts = getScripts("spring.datasource.schema",
  8. this.properties.getSchema(), "schema");
  9. if (!scripts.isEmpty()) {
  10. if (!isEnabled()) {
  11. logger.debug("Initialization disabled (not running DDL scripts)");
  12. return false;
  13. }
  14. String username = this.properties.getSchemaUsername();
  15. String password = this.properties.getSchemaPassword();
  16. runScripts(scripts, username, password);
  17. }
  18. return !scripts.isEmpty();
  19. }
  20.  
  21.   查看getScripts()方法
  1. private List<Resource> getScripts(String propertyName, List<String> resources,
    String fallback) {
    if (resources != null) {
    return getResources(propertyName, resources, true);
    }
    String platform = this.properties.getPlatform();
    List<String> fallbackResources = new ArrayList<>();
    fallbackResources.add("classpath*:" + fallback + "-" + platform + ".sql");    //.sql文件存放在这路径下
    fallbackResources.add("classpath*:" + fallback + ".sql");              //.sql也可以使用者方式存放
    return getResources(propertyName, fallbackResources, false);
    }
  1.  
  1.  

  

  1. //执行Sql语句原理
    private void runScripts(List<Resource> resources, String username, String password) {
  2. if (resources.isEmpty()) {
  3. return;
  4. }
  5. ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
  6. populator.setContinueOnError(this.properties.isContinueOnError());
  7. populator.setSeparator(this.properties.getSeparator());
  8. if (this.properties.getSqlScriptEncoding() != null) {
  9. populator.setSqlScriptEncoding(this.properties.getSqlScriptEncoding().name());
  10. }
  11. for (Resource resource : resources) {
  12. populator.addScript(resource);
  13. }
  14. DataSource dataSource = this.dataSource;
  15. if (StringUtils.hasText(username) && StringUtils.hasText(password)) {
  16. dataSource = DataSourceBuilder.create(this.properties.getClassLoader())
  17. .driverClassName(this.properties.determineDriverClassName())
  18. .url(this.properties.determineUrl()).username(username)
  19. .password(password).build();
  20. }
  21. DatabasePopulatorUtils.execute(populator, dataSource);
  22. }

  

默认创建表:  

  1. schema-*.sqldata-*.sql
  2. 默认规则:schema.sqlschema-all.sql
  3. 可以使用
  4. schema:
  5. - classpath:指定名称.sql
  6. 指定位置

  2.不使用默认的数据源,使用阿里的数据源。

  通过查看源代码可以知道,默认的数据源中是没有druid连接池的,但是默认的连接池都有放在容器中,所以我们可以手写一个配合类,并放在容器中即可,容器会自动加载我们的。

    2.1首先在pom.xml中依赖druid的依赖包

    2.2写一个配置类,可以参照DataSourceConfiguration

      根据以下配置就可以配置好Druid数据库

  1. @Configuration
  2. public class config {
  3.  
  4. @Bean
  5. @ConditionalOnProperty(name = "spring.datasource.type")
  6. public DataSource dataSource(){
  7. return new DruidDataSource();
  8. }

  ·效果:

  

  

  

·

Spring Boo数据访问JDBC的更多相关文章

  1. Spring 梳理-数据访问-DB

    针对接口编程 DAO是指数据访问对象(data access object),它提供了数据读取和写入到数据库中的一种方式.Spring认为,它应该以接口的方式发布功能,而应用程序的其他部分需要通过接口 ...

  2. 06.深入浅出 Spring Boot - 数据访问之Druid

    代码下载:https://github.com/Jackson0714/study-spring-boot.git 一.Druid是什么? 1.Druid是数据库连接池,功能.性能.扩展性方面都算不错 ...

  3. 07.深入浅出 Spring Boot - 数据访问之Mybatis(附代码下载)

    MyBatis 在Spring Boot应用非常广,非常强大的一个半自动的ORM框架. 代码下载:https://github.com/Jackson0714/study-spring-boot.gi ...

  4. Spring ( 五 )Spring之数据访问与事务管理

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.Spring之数据访问 1.Spring数据访问工程环境搭建 ​ jdbc.properties配置 ...

  5. Spring Boot数据访问之动态数据源切换之使用注解式AOP优化

    在Spring Boot数据访问之多数据源配置及数据源动态切换 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中详述了如何配置多数据源及多数据源之间的动态切换.但是需要读数据库的地方,就 ...

  6. Spring Boot数据访问之多数据源配置及数据源动态切换

    如果一个数据库数据量过大,考虑到分库分表和读写分离需要动态的切换到相应的数据库进行相关操作,这样就会有多个数据源.对于一个数据源的配置在Spring Boot数据访问之数据源自动配置 - 池塘里洗澡的 ...

  7. Spring Boot数据访问之整合Mybatis

    在Mybatis整合Spring - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中谈到了Spring和Mybatis整合需要整合的点在哪些方面,需要将Mybatis中数据库连接池等相关对 ...

  8. Spring Boot数据访问之Druid连接池的配置

    在Spring Boot数据访问之数据源自动配置 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中数据源连接池方式缺省(type)情况下默认使用HikariCP,那不缺省如何配置呢?我们 ...

  9. Spring Boot数据访问之数据源自动配置

    Spring Boot提供自动配置的数据访问,首先体验下,Spring Boot使用2.5.5版本: 1)导入坐标: 2.5.25版本支持8.0.26mysql数据库驱动.spring-boot-st ...

随机推荐

  1. 【原创】大数据基础之Quartz(1)简介、源代码解析

    一简介 官网 http://www.quartz-scheduler.org/ What is the Quartz Job Scheduling Library? Quartz is a richl ...

  2. Flask开发微电影网站(四)

    会员中心页面,如下图所示 用户登录后,修改密码页面,如下图所示 用户查看自己的评论页面,如下图所示 用户查看自己的登录日志页面,如下图所示 用户查看自己收藏的电影的页面,如下图所示 1. 定义用户主页 ...

  3. yapi部署

    官方提供了两种安装方式,由于环境或者权限问题可能会遇到不少麻烦 最简单的安装方式: 第一种方式 npm install -g yapi-cli --registry https://registry. ...

  4. Python_paramiko模块

    paramiko模块安装:pip3 install paramiko paramiko模块(模拟SSH),是基于SSH(网络安全协议)用于连接远程服务器并执行相关操作. ssh: 基于口令的安全验证 ...

  5. Linux下如何查看系统启动时间和运行时间以及安装时间

    1.uptime命令输出:16:11:40 up 59 days, 4:21, 2 users, load average: 0.00, 0.01, 0.00 2.查看/proc/uptime文件计算 ...

  6. python数据类型——数据转换

    数据类型有很多种,比如数值和字符,比如6和a,字符是需要加双引号的,下面的例子运行的结果是不一样的,数值会相加而字符会相连 print(6+6)print("6"+"6& ...

  7. Burnside引理与Polya定理 学习笔记

    原文链接www.cnblogs.com/zhouzhendong/p/Burnside-Polya.html 问题模型 有一个长度为 $n$ 的序列,序列中的每一个元素有 $m$ 种取值. 如果两个序 ...

  8. 英语口语练习系列-C39-舞蹈-谈论昨天的活动

    词汇-舞蹈(dancing) ballet body shaking sway the body have a good figure special training arm movement da ...

  9. Android源代码下载 “Gerrit下载源代码”

    repo init -u ssh://jenkins@gerrit.y:29419/manifest -m k86A.xml 使用-m参数指定具体使用的是k86A.mxl文件 步骤1. curl ht ...

  10. 树形数组 java

    2^k求法 int lowbit(int x) { return x&(-x); } lowbit()的返回值就是 2^k 次方的值. 基本树形数组的模板 import java.util.* ...