2017-07-04 16 views
1

私はflyway + hibernate validateを使用します。hibernate検証前にフライウェイの移行を開始するにはどうすればよいですか?

@Component 
public class DbMigration { 

    private static final Logger LOG = LoggerFactory.getLogger(DbMigration.class); 

    private final Config config; 

    @Autowired 
    public DbMigration(Config config) { 
     this.config = config; 
    } 

    public void runMigration() { 
     try { 
      Flyway flyway = new Flyway(); 
      flyway.configure(properties()); 
      int migrationApplied = flyway.migrate(); 
      LOG.info("[" + migrationApplied + "] migrations are applied"); 
     } catch (FlywayException ex) { 
      throw new DatabaseException("Exception during database migrations: ", ex); 
     } 
    } 

    public Properties properties() { 
     //my prop 
    } 
} 

そしてApllicationクラスで、私はそれを行う:

runMigration();
public static void main(String[] args) { 
     try { 
      AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfiguration.class); 
      context.getBean(DbMigration.class).runMigration(); 

しかし、私の休止状態STARTとスローexeptionを検証し、私はフライウェイBeanを持っています。どうすれば次に始めることができますか?

  1. 実行移行
  2. 開始検証

EDIT休止状態:

@Bean 
    @Autowired 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource datasource) { 
     log.info("entityManagerFactory start"); 
     dbMigration.runMigration(); 

をしかし、私はあなたが実体を持っている場合、それは、あなたの春のアプリケーション構成では

+0

あなたは '春-boot'を使用していますか?その場合、フライウェイ移行のためのコンポーネントを定義する必要はありません。あなたがデフォルトのオプションをオーバーライドして、私が私の答えで説明したように、hibernateがBeanの設定を追加する前にそれを実行させたいなら。 spring-bootに移行を実行するよう指示する必要はありません。自動的に実行します。 – Mustafa

答えて

1

悪いだと思いますあなたがそれをflyway beanに依存するようにすることができますtsはその後に初期化されます。何かのように:

@Bean 
@DependsOn("flyway") 
public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
    // Initialize EntityManagerFactory here 
} 

flyway Bean構成のようなものになります

@Bean(initMethod = "migrate") 
public Flyway flyway() { 
    Flyway flyway = new Flyway(); 
    // configure bean here 
    return flyway; 
} 
+0

はい私は "flyway"を得るLocalContainerEntityManagerFactoryBeanを持っていますか? – user5620472

+0

「フライウェイ」は、あなたのフライウェイビーンの名前です。 'LocalContainerEntityManagerFactoryBean'のように設定することができます。私は私の答えに例を追加します。 – Mustafa

関連する問題