说说在 Spring Boot 中如何配置数据源
假设我们需要使用 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)工程包配置 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 项目启动时,就会先运行这些脚本,执行初始化操作。