第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

創(chuàng)建名為“flywayInitializer”的 bean 時出錯

創(chuàng)建名為“flywayInitializer”的 bean 時出錯

胡子哥哥 2023-10-12 20:41:58
我正在嘗試在 Docker 容器中運行我的項目測試。所有測試在本地運行時都運行良好。當(dāng)我嘗試將測試移動到 docker 容器時,錯誤開始發(fā)生。這是錯誤消息:java.lang.IllegalStateException: Failed to load ApplicationContext[...]Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.command.DbMigrate$FlywayMigrateException: Migration V1__initial_user.sql failed-------------------------------------SQL State  : 42601Error Code : 0Message    : ERROR: syntax error at or near "GENERATED"  Position: 45Location   : db/migration/V1__initial_user.sql (/Users/villemossip/Desktop/GRP/GRP-SAS/application/build/resources/main/db/migration/V1__initial_user.sql)Line       : 36Statement  : CREATE TABLE revinfo(    rev      INTEGER GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ),    revtstmp BIGINT,    PRIMARY KEY (rev))
查看完整描述

3 回答

?
慕沐林林

TA貢獻2016條經(jīng)驗 獲得超9個贊

看起來帶有數(shù)據(jù)庫的測試容器已成功啟動,因此沒有問題,您將得到一個空數(shù)據(jù)庫。


然后你嘗試運行飛行路線,但失敗了。Spring Boot中的Flyway在Spring應(yīng)用程序上下文初始化期間工作,因此實際遷移在應(yīng)用程序上下文初始化時運行,因此遷移失敗看起來像Spring失敗。


但是,記錄了原因:遷移文件包含無效內(nèi)容:


Migration V1__initial_user.sql failed

-------------------------------------

SQL State  : 42601

Error Code : 0

Message    : ERROR: syntax error at or near "GENERATED"

 Position: 45

Location   : db/migration/V1__initial_user.sql (/Users/villemossip/Desktop/GRP/GRP- 

SAS/application/build/resources/main/db/migration/V1__initial_user.sql)

Line       : 36

Statement  : CREATE TABLE revinfo

(

   rev      INTEGER GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 ),

   revtstmp BIGINT,

   PRIMARY KEY (rev)

)

這GENERATED BY是不受支持的。


為什么?您的 docker 映像可能包含不支持此語法的 RDBMS 版本。所以它和你在沒有docker的本地環(huán)境中使用的DB不同。


無論如何,這不是關(guān)于 docker、spring 或 Flyway 的問題,而是關(guān)于數(shù)據(jù)庫和遷移代碼的問題。


在分辨率方面,我建議直接運行DB的docker鏡像(不帶java、testcontainers和flyway)。當(dāng)它運行時,只需在 pgadmin 或其他東西中“手動”運行此遷移即可。您預(yù)計會看到相同的錯誤。


查看完整回答
反對 回復(fù) 2023-10-12
?
天涯盡頭無女友

TA貢獻1831條經(jīng)驗 獲得超9個贊

就我而言,我在 application.properties 文件中添加了

spring.flyway.baselineOnMigrate = true

我還必須從版本 1.1 而不是 1 開始,否則 Flyway 會拋出錯誤(flyway 8.0.5)


查看完整回答
反對 回復(fù) 2023-10-12
?
慕森卡

TA貢獻1806條經(jīng)驗 獲得超8個贊

我發(fā)現(xiàn)問題出在 Postgres 版本上。由于某種原因,默認(rèn)情況下,docker 鏡像是使用舊版本 9.6.12 創(chuàng)建的,但 SQL 腳本GENERATED BY DEFAULT已添加到版本 10 的 Postgres 中。


解決方案1(將sql腳本更新到舊版本):


CREATE TABLE revinfo

(

    rev      INTEGER PRIMARY KEY NOT NULL,

    revtstmp BIGINT

);

解決方案2: 通過在項目中創(chuàng)建CustomPostgreSQLContainer文件將docker鏡像版本更改為11.2。


import org.testcontainers.containers.PostgreSQLContainer;


public class CustomPostgreSQLContainer extends PostgreSQLContainer<CustomPostgreSQLContainer> {

    private static final String IMAGE_VERSION = "postgres:11.2";

    private static CustomPostgreSQLContainer container;

    CustomPostgreSQLContainer() {

        super(IMAGE_VERSION);

    }

    public static CustomPostgreSQLContainer getInstance() {

        if (container == null) {

            container = new CustomPostgreSQLContainer();

        }

        return container;

    }

    @Override

    public void start() {

        super.start();

        System.setProperty("spring.datasource.url", container.getJdbcUrl());

        System.setProperty("spring.datasource.username", container.getUsername());

        System.setProperty("spring.datasource.password", container.getPassword());

    }

    @Override

    public void stop() {

        //do nothing, JVM handles shut down

    }

}

并更新 BaseIntTest 文件:


@Testcontainers

@SpringBootTest

public class BaseIntTest {


    @Container

    private static final PostgreSQLContainer<?> container = CustomPostgreSQLContainer.getInstance();

最后從測試 application.properties 文件中刪除兩行:


spring.datasource.driver-class-name=org.testcontainers.jdbc.ContainerDatabaseDriver

spring.datasource.url=jdbc:tc:postgresql://localhost:5433/test


查看完整回答
反對 回復(fù) 2023-10-12
  • 3 回答
  • 0 關(guān)注
  • 415 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號