How to add the mode=mysql to embedded H2 DB in Spring Boot 1.4.1 for @DataJpaTest?

前端 未结 5 2099
自闭症患者
自闭症患者 2020-12-18 20:41

I have some problems with using a schema.sql file to create my sql schema when executing a junit test while this schema contains mysql specific expression. I have to add the

相关标签:
5条回答
  • 2020-12-18 20:56

    Set

    spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL
    

    in application-test.properties, plus

    @RunWith(SpringRunner.class)
    @DataJpaTest
    @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
    @ActiveProfiles("test")
    

    on the test class

    0 讨论(0)
  • 2020-12-18 20:57

    I have tried similiar approaches to get this to work, but spring does not take the spring.datasource.url=jdbc:h2:mem:testdb;MODE=MYSQL from my test-application.properties

    Did you try to append this parameters instead of rewriting the existing ones?

    spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL
    

    All other settings from my test-application.properties have been read successfully.

    I thought that file should be named application-test.properties.

    0 讨论(0)
  • 2020-12-18 21:09

    I was able to run it with this config:

    # for integration tests use H2 in MySQL mode
    spring.datasource.url=jdbc:h2:mem:testdb;DATABASE_TO_LOWER=TRUE;MODE=MySQL;
    spring.jpa.database-platform=org.hibernate.dialect.MariaDBDialect
    

    The main trick here is to force Hibernate to generate SQL scripts for MariaDB dialect because otherwise Hibernate tries to use H2 dialect while H2 is already waiting for MySQL like commands.

    Also I tried to use more fresh MariaDB103Dialect for MariaDB 10.3 but it doesn't worked properly.

    0 讨论(0)
  • 2020-12-18 21:11

    I was having this same issue. It would not pick up the url when running tests. I'm using flyway to manage my scripts. I was able to get all of these working together by following these few steps.

    Created a V1_init.sql script in src/test/resources/db/migration so that it is the first script run by flyway.

    SET MODE MYSQL; /* another h2 way to set mode */
    
    CREATE SCHEMA IF NOT EXISTS "public"; /* required due to issue with flyway --> https://stackoverflow.com/a/19115417/1224584*/
    

    Updated application-test.yaml to include the schema name public:

    flyway:
      schemas: public
    

    Ensure the test specified the profile: @ActiveProfiles("test")

    0 讨论(0)
  • 2020-12-18 21:15

    You need to set MYSQL mode on h2 and disable replacing of datasource url for embedded database:

    Modify application-test.yaml

    spring:
      datasource:
        url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false;MODE=MYSQL  
      test:
        database:
          replace: NONE
    
    0 讨论(0)
提交回复
热议问题