Spring Boot(16)——使用DataSource

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 使用DataSource需要使用DataSource可以在pom.xml中添加spring-boot-starter-jdbc依赖,这会自动加入Spring Jdbc的依赖。还需要加入相应的JDBC驱动包的依赖,笔者这里使用的是MySQL的驱动。

使用DataSource

需要使用DataSource可以在pom.xml中添加spring-boot-starter-jdbc依赖,这会自动加入Spring Jdbc的依赖。还需要加入相应的JDBC驱动包的依赖,笔者这里使用的是MySQL的驱动。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

DataSource的自动配置由org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration负责,当不存在DataSource类型的bean时,其会负责创建一个池化的DataSource。内置支持的连接池包括下面这几个,默认自动使用的顺序也是按照下面的顺序进行使用。即如果Classpath下存在HikariDataSource时将优先使用HikariDataSource,其次是Tomcat提供的数据库连接池,最后是dbcp2。

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

当添加了spring-boot-starter-jdbc依赖时,会自动级联加入Hikari依赖,即此时默认将使用HikariDataSource。当Classpath下同时存在多个支持的数据库连接池实现时,如果不期望使用自动选择的数据库连接池实现,可以通过spring.datasource.type指定需要使用的数据库连接池实现。比如如果Classpath下同时存在com.zaxxer.hikari.HikariDataSourceorg.apache.tomcat.jdbc.pool.DataSource,默认将使用com.zaxxer.hikari.HikariDataSource,如果期望使用org.apache.tomcat.jdbc.pool.DataSource,则可以配置spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource

然后可以通过spring.datasource前缀开始的属性配置数据库连接相关的信息了,比如配置URL、驱动Class、用户名、密码等。数据库的配置信息由org.springframework.boot.autoconfigure.jdbc.DataSourceProperties负责接收。

spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=elim

更多的配置信息可以参考DataSourceProperties的API文档。

如果需要对使用的HikariDataSource连接池进行配置,可以通过spring.datasource.hikari前缀开始的属性进行配置,对应的配置属性将由com.zaxxer.hikari.HikariDataSource负责接收,可以配置的属性请参考对应的API文档。

如果需要对使用的Tomcat连接池进行配置,可以通过spring.datasource.tomcat前缀开始的属性进行配置,对应的配置属性将由org.apache.tomcat.jdbc.pool.DataSource负责接收,可以配置的属性请参考对应的API文档。

如果需要对使用的dbcp2连接池进行配置,可以通过spring.datasource.dbcp2前缀开始的属性进行配置,对应的配置属性将由org.apache.commons.dbcp2.BasicDataSource负责接收,可以配置的属性请参考对应的API文档。

有了DataSource后,就可以使用DataSource了,我们可以在需要应用它的地方直接进行注入,比如下面这样。

@Service
public class JdbcService {

    @Autowired
    private DataSource dataSource;
    
    public List<String> getUsers() throws Exception {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
        List<String> names = new ArrayList<>();
        try {
            connection = this.dataSource.getConnection();
            statement = connection.createStatement();
            resultSet = statement.executeQuery("select name from tb_user");
            while (resultSet.next()) {
                names.add(resultSet.getString(1));
            }
        } finally {
            if (resultSet != null) {
                resultSet.close();
            }
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        }
        return names;
    }
    
}

现在的应用中基本都不会直接使用DataSource编程了,基本都是基于Hibernate、JPA或Mybatis编程。也有的会使用JdbcTemplate了。拥有了DataSource类型的bean后,Spring Boot的org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration将自动为我们配置JdbcTemplate bean,所以上述代码可以改写为如下这样。

@Service
public class JdbcService {

    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    public List<String> getUsers() throws Exception {
        String sql = "select name from tb_user";
        List<String> names = this.jdbcTemplate.queryForList(sql, String.class);
        return names;
    }
    
}

可以使用spring.jdbc.template前缀开始的属性对JdbcTemplate进行一些自定义配置,对应的配置属性将由org.springframework.boot.autoconfigure.jdbc.JdbcProperties.Template负责接收,可以配置的属性请参考对应的API文档。

使用基于内嵌数据库的DataSource

Spring Boot支持对H2、HSQL和Derby三种内嵌的数据库进行自动配置,只要Classpath下存在它们相关的驱动Class,Spring Boot将自动配置对应的DataSource。基于内嵌数据库的自动配置的DataSource是不需要配置用户名、密码等数据库连接信息的。有了DataSource后就可以进行与DataSource相关的操作了,进行单元测试时使用内嵌的数据库是一个不错的选择。

使用基于JNDI的DataSource

如果需要使用基于JNDI的DataSource,则可以通过spring.datasource.jndi-name属性指定DataSource对应的JNDI名称。

spring.datasource.jndi-name=java:jboss/datasources/customers

(注:本文基于Spring Boot 2.0.3所写)

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
145 0
|
6月前
SpringBoot+Mybatis-Plus+PageHelper分页+多条件查询
SpringBoot+Mybatis-Plus+PageHelper分页+多条件查询
168 0
|
8天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
20 2
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
54 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
1月前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
62 2
|
5月前
|
运维 Java 关系型数据库
Spring运维之boot项目bean属性的绑定读取与校验
Spring运维之boot项目bean属性的绑定读取与校验
54 2
|
5月前
|
存储 运维 Java
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
63 2
|
5月前
|
Java Maven
springboot项目打jar包后,如何部署到服务器
springboot项目打jar包后,如何部署到服务器
432 1
|
5月前
|
XML 运维 Java
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
55 1
|
5月前
springboot2.4.5使用pagehelper分页插件
springboot2.4.5使用pagehelper分页插件
156 0