考虑定义一个类型为'org.flywaydb.core.Flyway'的bean。

时间:2018-02-23 14:27:55

标签: java spring hibernate spring-boot flyway

我有一个Spring Boot项目,其中Flyway与JPA一起使用。

<dependency>
  <groupId>org.flywaydb</groupId>
  <artifactId>flyway-core</artifactId>
</dependency>

该项目运行得非常好。由于一些要求,我不得不改变Flyway加载的顺序,以便在Hibernate之后加载它。我搜索并找到了以下解决方案https://stackoverflow.com/a/44806540/1361888。我在上面的链接中按照建议的答案创建了MigrationConfiguration。现在,当我运行应用程序时,它会给我以下错误,

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method flywayInitializer in 
com.x2iq.microservice.config.MigrationConfiguration required a bean of type 
'org.flywaydb.core.Flyway' that could not be found.


Action:

Consider defining a bean of type 'org.flywaydb.core.Flyway' in your 
configuration.

现在我对Spring Boot相当新,所以无法理解这个错误,我在网上找不到任何与此错误有关的内容。

2 个答案:

答案 0 :(得分:2)

@Configuration类中,您希望将Flyway Bean暴露给容器。这样的事情可以解决问题:

@Configuration 
public class MigrationConfiguration {

    @Bean
    public Flyway flyway(){
        return new Flyway();
    }
}

答案 1 :(得分:0)

请参考以下链接:

Spring配置是用于flyway bean的。

https://flywaydb.org/documentation/api/

我的项目示例:

<bean id="flyway" class="org.flywaydb.core.Flyway" init-method="migrate">
    <property name="baselineOnMigrate" value="true" />
    <property name="locations" value="classpath:db/migration" />
    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${db.driver}"/>
    <property name="url" value="${db.url}"/>
    <property name="username" value="${db.username}"/>
    <property name="password" value="${db.password}"/>
</bean>