说说在 Spring Boot 中如何配置数据源

201 阅读2分钟

假设我们需要使用 Oracle 数据库,那么首先需要在 pom.xml 中引用 Oracle 数据库驱动包:

<properties>
       <oracle.version>12.2.0.1</oracle.version>
       ...
</properties>

<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>${oracle.version}</version>
</dependency>

1 直接配置

在 application.yml 中配置数据源参数,形如:

spring:  
datasource:
    	url: jdbc:oracle:thin:@192.168.4.15:1599:orcl
    	username: deniro
    	password: 2020

可以不用显式指定驱动类名,因为Spring Boot 会自动根据数据库 URL 地址推算出来。当然也可以显式指定: driver-class-name: oracle.jdbc.OracleDriver

如果在类路径中存在 Tomcat 的 JDBC 连接池,那么 Spring Boot 就会直接使用 Tomcat 的连接池。否则, Spring Boot 会在类路径下寻找以下连接池: HikariCP 或 Commons DBCP 2。

HikariCP是日本程序员开源的一个数据库连接池组件,据说代码非常轻量,并且速度也非常快。根据官方提供的数据,在i7,开启32个线程32个连接的情况下,进行随机数据库读写操作,HikariCP的速度是现在常用的C3P0数据库连接池的数百倍。在SpringBoot2.0中,官方也是推荐使用HikariCP。

2 通过 JNDI 配置

也可以通过JNDI来配置数据源。这种方式拥有以下优点:

  1. 工程包中可以不必包含与数据源相关的具体参数信息;
  2. 方便运维人员定期修改数据库密码;
  3. 替换连接池的工作交给容器处理。

(1)工程包配置 JNDI

修改工程包的 application.yml:

spring:
  datasource:
    jndi-name: XXX_DATASOURCE

(2)Tomcat 配置 JNDI

修改 Tomcat 的 conf/context.xml:

<Resource name="XXX_DATASOURCE" auth="Container" type="javax.sql.DataSource" factory="com.alibaba.druid.pool.DruidDataSourceFactory" username="deniro" password="2020" driverClassName="oracle.jdbc.OracleDriver" url=" jdbc:oracle:thin:@192.168.4.15:1599:orcl" filters="stat" connectionProperties="druid.stat.mergeSql=true;druid.stat.slowSqlMillis=2000" useGlobalDataSourceStat="true" defaultTransactionIsolation="READ_COMMITTED" validationQuery="select 1 from dual" removeAbandoned="false" logAbandoned="true" removeAbandonedTimeout="1800" maxActive="20" initialSize="5" maxWait="60000" minIdle="10" timeBetweenEvictionRunsMillis="60000" minEvictableIdleTimeMillis="300000" testWhileIdle="true" testOnBorrow="false" testOnReturn="false" asyncInit="true"/>

示例使用了 Druid 连接池。 注意:如果在 Tomcat 容器侧修改了默认连接池方案,那么就必须把相应的依赖包放入Tomcat 安装目录的 lib 文件夹中。

3 配置初始化脚本

初始化脚本分为两部分,一个是表结构初始化;另一个是数据初始化。它们分别配置在 schema 与 data 选项中。形如:

spring:
    # 数据源
  datasource:
    schema:
      - classpath:sql/model1-schema.sql
      - classpath:sql/model2-schema.sql
    data:
      - classpath:sql/model1.sql

在 yml 格式中,列表项使用的是 - 加上空格作为前缀。 这些脚本文件需要放置在 src/resources/sql 文件夹下。

Spring Boot 项目启动时,就会先运行这些脚本,执行初始化操作。