SpringBoot配置数据源DataSource

github源码地址:

https://github.com/yangxiaowan/databaseconfig.git

SpringBoot如何快速配置数据源?有如下两种方式:

  • 通过spring-boot-starter-jdbc快速配置数据源

  • 自定义数据源DataSource

首先我们需要明确数据源DataSource有什么作用:

  1. 通过DataSource可以获取数据库连接Connection

  2. 通过DataSource创建JdbcTemplate操作数据库

实际项目中,我们在配置数据源的时候会指定数据库连接池,比如流行的Hikari(spring默认的数据库连接池)、C3p0、Dbcp2以及阿里巴巴的Druid。应用在操作数据库的时候,直接从数据库连接池获取连接,而不需要每次创建新的连接。至于数据库连接池的好处,总结就是: 应用创建和销毁连接的代价是很大的,使用数据库连接池可以很好的复用连接,节省开销,方便管理,简化开发。

 

  • 通过spring-boot-starter-jdbc快速配置数据源

  1. 引入maven依赖。

<!--spring-boot-starter-jdbc自动配置-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <version>2.2.2.RELEASE</version>
</dependency>
<!--数据库驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.18</version>
</dependency>

 2.在application.properties文件中配置数据库连接属性。

spring.datasource.url=jdbc:mysql://localhost:3306/blue?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=wan4380797
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

(PS: 关于数据库驱动版本的小知识,当connector版本是6.0以前的使用com.mysql.jdbc.Driver,6.0以后的使用com.mysql.cj.jdbc.Driver,我这边使用的是8.0.18版本的)

 

上面2步我们就已经通过springboot starter机制为我们配置好数据源了。原理很简单。首先我们需要了解springboot的starter机制,通常情况下一个starter依赖是由多个依赖组成的。比如spring-boot-starter-jdbc由spring-boot-starter(自动配置,自动扫描)、spring-jdbc(提供spring管理数据库的标准接口)和HikariCP(Spring默认的数据库连接池)组成。所以springboot的starter依赖可以通过最少量的属性实现自动配置,至于深层次的原因还需要取看源码才行。

我们通过Junit来测试下我们的数据源DataSource是否配置成功:

@SpringBootTest
@RunWith(SpringRunner.class)
public class JdbcSimpleDatasourceApplicationTests {

    @Autowired
    private DataSource dataSource;

    @Test
    public void springDataSourceTest(){
        //输出为true
        System.out.println(dataSource instanceof HikariDataSource);
        System.out.println(dataSource instanceof MyDataSource);
        try{
            Connection connection = dataSource.getConnection();
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery("select * from student");
            Student student = null;
            if(resultSet.next()){
                student = new Student();
                student.setId(resultSet.getString("id"));
                student.setStudentId(resultSet.getString("student_id"));
                student.setStudentName(resultSet.getString("student_name"));
                student.setAge(resultSet.getInt("age"));
            }
            System.out.println(student);
            statement.close();
            connection.close();
        }catch (Exception exception){
            exception.printStackTrace();
        }
    }
}
  • 自定义数据源DataSource

可能有些场景我们不想使用SpringBoot JDBC默认的数据源,我需要引入数据库连接池,然后自定义数据源,指定数据源类型。下面以Dbcp2数据库连接池配置数据源为例:

  1. 引入dbcp2的数据库连接池已经相关依赖。

<!-- dbcp2数据库连接池 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-dbcp2</artifactId>
    <version>2.7.0</version>
</dependency>
<!--数据库驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.18</version>
</dependency>
<!-- 提供操作数据库的标准口径 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.2.RELEASE</version>
    <scope>compile</scope>
</dependency>

  2. 在application.properties文件中配置数据库连接属性。

customize.datasource.url=jdbc:mysql://localhost:3306/blue?serverTimezone=UTC
customize.datasource.username=root
customize.datasource.password=wan4380797
customize.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

  3. 自定义DataSource

import org.apache.commons.dbcp2.BasicDataSource;
@Configuration
public class Dbcp2DataSource {
    @Bean("myDbcp2DataSource")
    @ConfigurationProperties(prefix = "customize.datasource")
    public DataSource getDataSource(){
       return DataSourceBuilder.create().type(BasicDataSource.class).build();
    }
}

这边我们可以看到我们创建的DataSource类型为BasicDataSource类型的。并且BasicDataSource来源于之前配置的dbcp2依赖的jar包中。下面我们使用junit来验证以下数据源配置的正确与否:

@SpringBootTest
@RunWith(SpringRunner.class)
public class JdbcCustomizeDatasourceApplicationTests {

    @Autowired
    @Qualifier("myDbcp2DataSource")
    private DataSource dataSource;

    @Test
    public void springJdbcTemplateTest(){
        try{
            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
            String queryStr = "select * from student";
            List<Student> resultList = new ArrayList<>();
            jdbcTemplate.query(queryStr, (ResultSet resultSet)->{
                Student student = new Student();
                student.setId(resultSet.getString("id"));
                student.setStudentId(resultSet.getString("student_id"));
                student.setStudentName(resultSet.getString("student_name"));
                student.setAge(resultSet.getInt("age"));
                resultList.add(student);
            });
            resultList.forEach((Student student) -> System.out.println(student));
        }catch (Exception exception){
            exception.printStackTrace();
        }
    }
}

 

 

 

 

 

  • 40
    点赞
  • 141
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
在Spring Boot中配置数据源可以使用以下步骤: 1. 添加所需的数据库驱动依赖。例如,如果你要使用MySQL数据库,可以在pom.xml文件中添加以下依赖: ```xml <dependencies> ... <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> ... </dependencies> ``` 2. 在application.properties或application.yml文件中配置数据源属性。以下是一个示例配置MySQL数据源的application.properties文件: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 3. 创建一个数据源bean。在Spring Boot中,可以使用`@ConfigurationProperties`注解来创建一个名为`DataSource`的数据源bean。在你的配置类中,添加以下代码: ```java import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.DriverManagerDataSource; import javax.sql.DataSource; @Configuration public class DataSourceConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return new DriverManagerDataSource(); } } ``` 4. 在需要使用数据源的地方注入`DataSource`对象。例如,在你的Repository或Service类中,使用`@Autowired`注解注入`DataSource`对象: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; @Repository public class MyRepository { private final JdbcTemplate jdbcTemplate; @Autowired public MyRepository(DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } // 使用jdbcTemplate执行数据库操作 // ... } ``` 以上步骤可以让你在Spring Boot中配置和使用数据源。根据你使用的数据库类型,需要相应地修改配置文件和依赖。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值