如何为集成测试覆盖多个数据源的 JPA 属性?
How can I override the JPA properties for multiple datasources for Integration tests?
我已经在 Spring 引导应用程序中成功地为两个不同的数据库和模式配置了两个数据源。现在,对于集成测试,我想使用嵌入式数据库 (HSQL) 并在那里执行测试。我尝试使用以下文件覆盖属性 (/src/test/resources/application-test.properties)
eot.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
eot.datasource.username=sa
eot.datasource.password=sa
eot.datasource.url=jdbc:hsqldb:mem:test;DB_CLOSE_DELAY=-1
eot.datasource.hikari.pool-name=ptest-eot
eot.datasource.jpa.show-sql=true
eot.datasource.jpa.generate-ddl=true
eot.datasource.jpa.database-platform=org.hibernate.dialect.HSQLDialect
eot.datasource.jpa.properties.hibernate.ddl-auto=create
eot.datasource.jpa.properties.hibernate.dialect=org.hibernate.dialect.HSQLDialect
info.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
info.datasource.username=sa
info.datasource.password=sa
info.datasource.url=jdbc:hsqldb:mem:test;DB_CLOSE_DELAY=-1
info.datasource.hikari.pool-name=ptest-info
info.datasource.jpa.show-sql=true
info.datasource.jpa.generate-ddl=true
info.datasource.jpa.database-platform=org.hibernate.dialect.HSQLDialect
info.datasource.jpa.properties.hibernate.ddl-auto=create
info.datasource.jpa.properties.hibernate.dialect=org.hibernate.dialect.HSQLDialect
在日志中我可以看到它获取了一些属性。在我的 application.yml 中,池的名称是 'eot-pool',当我 运行 测试时,它正确显示为 'ptest-eot'.
2022-05-27 17:09:03.855 INFO 6592 --- [ Test worker] mx.com.gnp.crm.adfe.EotJpaConfiguration : org.springframework.boot.autoconfigure.jdbc.DataSourceProperties@18a1fd92
2022-05-27 17:09:04.039 INFO 6592 --- [ Test worker] com.zaxxer.hikari.HikariDataSource : ptest-eot - Starting...
2022-05-27 17:09:04.845 INFO 6592 --- [ Test worker] com.zaxxer.hikari.pool.PoolBase : ptest-eot - Driver does not support get/set network timeout for connections. (característica no soportada)
2022-05-27 17:09:04.851 INFO 6592 --- [ Test worker] com.zaxxer.hikari.HikariDataSource : ptest-eot - Start completed.
但它并没有覆盖 JPA 属性。它不会创建模式 tables,也不会将 SQL 语句打印到日志中。
我尝试删除 'properties' 部分。使用例如:
info.datasource.jpa.show-sql=true
info.datasource.jpa.hibernate.ddl-auto=create
info.datasource.jpa.hibernate.dialect=org.hibernate.dialect.HSQLDialect
但是 JPA 属性没有被替换。
当我 运行 测试时,日志显示错误的方言(来自主 application.yml 文件)。
HHH000400: Using dialect: org.hibernate.dialect.DB2400Dialect
并且当测试 运行s:
SQL Error: -5501, SQLState: 42501
因为架构和 table 不存在。
当我有多个数据源时,如何覆盖集成测试的 JPA 属性?
您似乎有一个通用 application.yml
文件和一个用于测试环境的特定 application-test.properties
文件。我不确定您是否可以混合使用这些文件扩展名,可能不能。您可以选择对两者使用 .yml 或 .properties。尝试将文件名更改为 application-test.yml。此外,要激活这个特定的测试环境,有必要将这个配置放在 application.yml:
spring:
profiles:
active:test
我已经在 Spring 引导应用程序中成功地为两个不同的数据库和模式配置了两个数据源。现在,对于集成测试,我想使用嵌入式数据库 (HSQL) 并在那里执行测试。我尝试使用以下文件覆盖属性 (/src/test/resources/application-test.properties)
eot.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
eot.datasource.username=sa
eot.datasource.password=sa
eot.datasource.url=jdbc:hsqldb:mem:test;DB_CLOSE_DELAY=-1
eot.datasource.hikari.pool-name=ptest-eot
eot.datasource.jpa.show-sql=true
eot.datasource.jpa.generate-ddl=true
eot.datasource.jpa.database-platform=org.hibernate.dialect.HSQLDialect
eot.datasource.jpa.properties.hibernate.ddl-auto=create
eot.datasource.jpa.properties.hibernate.dialect=org.hibernate.dialect.HSQLDialect
info.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
info.datasource.username=sa
info.datasource.password=sa
info.datasource.url=jdbc:hsqldb:mem:test;DB_CLOSE_DELAY=-1
info.datasource.hikari.pool-name=ptest-info
info.datasource.jpa.show-sql=true
info.datasource.jpa.generate-ddl=true
info.datasource.jpa.database-platform=org.hibernate.dialect.HSQLDialect
info.datasource.jpa.properties.hibernate.ddl-auto=create
info.datasource.jpa.properties.hibernate.dialect=org.hibernate.dialect.HSQLDialect
在日志中我可以看到它获取了一些属性。在我的 application.yml 中,池的名称是 'eot-pool',当我 运行 测试时,它正确显示为 'ptest-eot'.
2022-05-27 17:09:03.855 INFO 6592 --- [ Test worker] mx.com.gnp.crm.adfe.EotJpaConfiguration : org.springframework.boot.autoconfigure.jdbc.DataSourceProperties@18a1fd92
2022-05-27 17:09:04.039 INFO 6592 --- [ Test worker] com.zaxxer.hikari.HikariDataSource : ptest-eot - Starting...
2022-05-27 17:09:04.845 INFO 6592 --- [ Test worker] com.zaxxer.hikari.pool.PoolBase : ptest-eot - Driver does not support get/set network timeout for connections. (característica no soportada)
2022-05-27 17:09:04.851 INFO 6592 --- [ Test worker] com.zaxxer.hikari.HikariDataSource : ptest-eot - Start completed.
但它并没有覆盖 JPA 属性。它不会创建模式 tables,也不会将 SQL 语句打印到日志中。
我尝试删除 'properties' 部分。使用例如:
info.datasource.jpa.show-sql=true
info.datasource.jpa.hibernate.ddl-auto=create
info.datasource.jpa.hibernate.dialect=org.hibernate.dialect.HSQLDialect
但是 JPA 属性没有被替换。
当我 运行 测试时,日志显示错误的方言(来自主 application.yml 文件)。
HHH000400: Using dialect: org.hibernate.dialect.DB2400Dialect
并且当测试 运行s:
SQL Error: -5501, SQLState: 42501
因为架构和 table 不存在。
当我有多个数据源时,如何覆盖集成测试的 JPA 属性?
您似乎有一个通用 application.yml
文件和一个用于测试环境的特定 application-test.properties
文件。我不确定您是否可以混合使用这些文件扩展名,可能不能。您可以选择对两者使用 .yml 或 .properties。尝试将文件名更改为 application-test.yml。此外,要激活这个特定的测试环境,有必要将这个配置放在 application.yml:
spring:
profiles:
active:test