溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

SpringBoot如何實(shí)現(xiàn)快速配置數(shù)據(jù)源

發(fā)布時(shí)間:2020-10-27 16:28:09 來(lái)源:億速云 閱讀:222 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

SpringBoot如何實(shí)現(xiàn)快速配置數(shù)據(jù)源?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

SpringBoot如何快速配置數(shù)據(jù)源;有如下兩種方式:

  1. 通過(guò)spring-boot-starter-jdbc快速配置數(shù)據(jù)源
  2. 自定義數(shù)據(jù)源DataSource

首先我們需要明確數(shù)據(jù)源DataSource有什么作用:

  1. 通過(guò)DataSource可以獲取數(shù)據(jù)庫(kù)連接Connection
  2. 通過(guò)DataSource創(chuàng)建JdbcTemplate操作數(shù)據(jù)庫(kù)
     

實(shí)際項(xiàng)目中,我們?cè)谂渲脭?shù)據(jù)源的時(shí)候會(huì)指定數(shù)據(jù)庫(kù)連接池,比如流行的Hikari(spring默認(rèn)的數(shù)據(jù)庫(kù)連接池)、C3p0、Dbcp2以及阿里巴巴的Druid。

一、使用數(shù)據(jù)庫(kù)連接池

應(yīng)用在操作數(shù)據(jù)庫(kù)的時(shí)候,直接從數(shù)據(jù)庫(kù)連接池獲取連接,而不需要每次創(chuàng)建新的連接。

至于數(shù)據(jù)庫(kù)連接池的好處,總結(jié)就是: 應(yīng)用創(chuàng)建和銷(xiāo)毀連接的代價(jià)是很大的,使用數(shù)據(jù)庫(kù)連接池可以很好的復(fù)用連接,節(jié)省開(kāi)銷(xiāo),方便管理,簡(jiǎn)化開(kāi)發(fā)。

可能有些場(chǎng)景我們不想使用SpringBoot JDBC默認(rèn)的數(shù)據(jù)源,我需要引入數(shù)據(jù)庫(kù)連接池,然后自定義數(shù)據(jù)源,指定數(shù)據(jù)源類(lèi)型。

下面以Dbcp2數(shù)據(jù)庫(kù)連接池配置數(shù)據(jù)源為例。

二、配置依賴(lài)

引入dbcp2的數(shù)據(jù)庫(kù)連接池已經(jīng)相關(guān)依賴(lài)。

<!-- dbcp2數(shù)據(jù)庫(kù)連接池 -->
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-dbcp2</artifactId>
  <version>2.7.0</version>
</dependency>
<!--數(shù)據(jù)庫(kù)驅(qū)動(dòng)-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.18</version>
</dependency>
<!-- 提供操作數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)口徑 -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>5.2.2.RELEASE</version>
  <scope>compile</scope>
</dependency>

三、編寫(xiě)配置項(xiàng)

在application.properties文件中配置數(shù)據(jù)庫(kù)連接屬性。

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

四、自定義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();
  }
}

這邊我們可以看到我們創(chuàng)建的DataSource類(lèi)型為BasicDataSource類(lèi)型的。并且BasicDataSource來(lái)源于之前配置的dbcp2依賴(lài)的jar包中。

五、調(diào)用驗(yàn)證

下面我們使用junit來(lái)驗(yàn)證以下數(shù)據(jù)源配置的正確與否:

@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();
    }
  }
}

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI