Spring Boot中的数据库应用程序.yml文件与applications.properties文件有何不同?

33

我有一个能够连接到Postgres数据库的Spring Boot应用程序。我已经使用application.properties文件设置了项目,但是我想切换到application.yml文件。但是当我进行切换时,我的应用程序在尝试连接到数据库时出现错误。

原始的application.properties文件:

spring.jpa.database=POSTGRESQL
spring.datasource.platform=postgres
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.database.driverClassName=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=foo
spring.datasource.password=bar

这是我在 application.yml 文件中所写的内容:

spring.jpa:
  database: POSTGRESQL
  hibernate.ddl-auto: create-drop
  show-sql: true

spring.datasource:
  platform: postgres
  driverClassName: org.postgresql.Driver
  url: jdbc:postgresql://localhost:5432/mydb
  username: foo
  password: bar

我在文件类型的翻译中有所遗漏吗?

5个回答

65

您需要将属性名称中的每个.字符视为yaml文件中的级别:

spring:
  jpa:
    database: POSTGRESQL
    show-sql: true
    hibernate:
      ddl-auto: create-drop
  datasource:
    platform: postgres
    url: jdbc:postgresql://localhost:5432/mydb
    username: foo
    password: bar
    driverClassName: org.postgresql.Driver

编辑:感谢提供修改建议。实际上,driverClassName属性应该位于spring.datasource下。但是,本回答的目的是展示如何将properties文件转换为yaml格式。因此,我已将driverClassName属性更改为正确的路径,这不是从propertiesyaml的转换的一部分。


19
请给另一个答案(Z0lt@n的答案)点赞。 但是为了未来的读者...这里贴上一个SQL Server版本。
spring:
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update
    properties:
      hibernate.jdbc.batch_size: 20
      hibernate.cache.use_query_cache: false
      hibernate.cache.use_second_level_cache: false
      hibernate.cache.use_structured_entries: false
      hibernate.cache.use_minimal_puts: false
  datasource:
    #SPRING_DATASOURCE_URL environment variable will be something like -> jdbc:sqlserver://MySqlServer\\MyInstance:1433;DatabaseName=MyDbName;
    url: ${SPRING_DATASOURCE_URL}
    username: ${SPRING_DATASOURCE_USERNAME}
    password: ${SPRING_DATASOURCE_PASSWORD}
    driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver

和 Maven 条目

    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
        <version>7.0.0.jre8</version>
    </dependency>

追加

这似乎是 driverClassName 的“标准”名称。

SPRING_DATASOURCE_DRIVER-CLASS-NAME

当然,在我的例子中,你会使用这个值:

com.microsoft.sqlserver.jdbc.SQLServerDriver

现在,有些关于spring和springboot的环境变量小技巧。

有时候,在为某些命令行项指定环境变量时,我不得不将连字符改成下划线。 (例如,“SPRING_DATASOURCE_DRIVER-CLASS-NAME”与“SPRING_DATASOURCE_DRIVER_CLASS_NAME”)

下面的“-e”通常表示“通过命令行传递环境变量值”。

MyCommandLineProgram.exe -e SPRING_DATASOURCE_URL="jdbc:sqlserver://myServerName:1433;DatabaseName=MyDB;" -e SPRING_DATASOURCE_USERNAME="myUserName" -e SPRING_DATASOURCE_PASSWORD="myPassword" -e SPRING_DATASOURCE_DRIVER_CLASS_NAME="com.microsoft.sqlserver.jdbc.SQLServerDriver"

这是给你的一些巫术。

对于那些对日志记录(logback.xml)问题感兴趣的人,可能也想在这里找到我的答案:

Spring Boot Logback DB Appender Properties


仅指定SPRING_DATASOURCE_URL(和其他)环境变量对于数据源来说不足够吗?您需要显式设置spring.jpa.datasource.url参数吗? - Anatolii Stepaniuk
所有其他的可能都有默认值。ddl-auto是我会明确说明的一个,因为在生产环境中它可能是危险的。 - granadaCoder

11

postgresqlapplication.yml 文件

Spring DATASOURCE(DataSourceAutoConfiguration和DataSourceProperties)

spring:
  datasource:
    driver-class-name: org.postgresql.Driver
    username: postgres
    password: root
    url: jdbc:postgresql://localhost/postgres
    platform: postgres
    initialization-mode: always
    continue-on-error: true
  jpa:
    show-sql: true
    generate-ddl: true
    hibernate:
      ddl-auto: create
    database: postgresql

0
server:
  port: 1111  
spring:
    application:
      name: client-one 
    datasource:
     password: postgres
     url: jdbc:postgresql://localhost:5432/postgres?currentSchema=education
     username: postgres
    jpa:
     hibernate:
      ddl-auto: update
     properties:
      hibernate:
        dialect: org.hibernate.dialect.PostgreSQLDialect
     show-sql: true


1
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

0

File application.yml

server:
    port: 1234
spring:
    application:
        name: foo
    datasource:
        url: jdbc:postgresql://localhost:5432/foo
        password: postgres
        username: postgres
    jpa:
        hibernate:
            ddl-auto: update
        properties:
            hibernate:
                dialect: org.hibernate.dialect.PostgreSQLDialect
        show-sql: true

使用PostgreSQL 15.3、JDK 20和Spring Boot 3.1.0 进行测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接