配置数据源

Spring Data JPA 能灵活操纵数据,但是在那之前,你需要告诉它能找到数据的地方

application.yaml

spring:
  profiles:
      active: dev-mysql

application-dev-h2.yaml

h2 数据库只要引入了依赖就会自动启用,我们只需要配置数据源进行连接就可以了。由于是随 Java 一同启动(同一进程),url 处填写的链接是 mem 来代表内存,而不是 tcp://...,这是需要注意的。同时,jdbc:h2:mem:test最后的 test 代表使用的数据库。

spring.datasource.dirver-class-name 代表使用的驱动程序,填写如下即可。

spring.datasource.type 代表了使用的连接池技术,这里使用了 Alibaba Druid 替代了默认的 HikariCP。

spring.jpa.hibernate.ddl-auto 可以为我们自动建表。选项包括:

  • update: 如果数据库中没有映射的表,就新建,如果已有,那么就在其基础上操作,适合生产环境。

  • create: 运行时新建(抹除之前的数据)。

  • create-drop: 运行时新建,运行完毕后销毁,适合测试环境。

  • none: disable DDL handling.

  • validate: 验证 schema,但不对数据库进行操作。

其中,ddl-autoddl 代表 Data Definition Language,指用于声明表、列、数据类型和约束的 SQL 的子集。

spring.jpa.show-sql 决定是否在控制台输出 JPA 执行的实际 SQL 语句。

spring:
  datasource:
    url: jdbc:h2:mem:test
    driver-class-name: org.h2.Driver
    # type: com.alibaba.druid.pool.DruidDataSource
    # 我使用 Alibaba Druid 连接 H2 会报错,所以不使用
  jpa:
    hibernate:
      ddl-auto: create-drop
    show-sql: true

application-dev-mysql.yaml

对于 MySQL,spring.datasource.driver-class-name 需要使用 com.mysql.cj.jdbc.Driver。切勿使用 com.mysql.jdbc.Driver,因为后者为已弃用的驱动。

另外,对于 MySQL 还要输入用户名密码。

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: yourpassword
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
  jpa:
    hibernate:
      ddl-auto: create-drop
    show-sql: true

application-prod.yaml

生产环境下,spring.jpa.hibernate.ddl-auto 设置为 update

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: yourpassword
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: false

如果不需要自动建表,希望使用自己的 SQL 文件初始化数据库,可以这样配置:

spring:
  datasource:
    # 驱动
    driver-class-name: org.h2.Driver
    # h2 内存数据库 内存模式连接配置
    url: jdbc:h2:mem:test
    # 初始化数据表 DDL
    schema: classpath:sql/init.sql
    # 初始化数据 DML
    data: classpath:sql/data.sql

DDL 建表,DML 填充数据。

JDBC MySQL url parameters

对于中文环境:

jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&character_set_server=utf8mb4

从 MySQL 8.0.16 开始,MySQL 开始支持 TLS 1.3。从 MySQL 8.0.28 开始,TLS 1.0 和 TLS 1.1 不再受到支持。

最后更新于