美文网首页
springboot集成flyway,及启动后初始化问题解决Ap

springboot集成flyway,及启动后初始化问题解决Ap

作者: cjlynn | 来源:发表于2021-07-01 17:30 被阅读0次

    1、配置pom.xml

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

    注意:版本自行修改
    spring-boot-autoconfigure-2.2.6.RELEASE.jar对应flyway版本6.0.8

    2、spring配置

    # Spring配置
    spring:
      flyway:
        baseline-on-migrate: false
        locations: classpath:/db/migration
    

    3、项目启动之后,需要一些初始化的操作,有些项目中有@PostConstruct,会在flyway之前先运行,涉及到数据库的操作就会出问题,下面有2种解决办法,解决这个问题。他们都会在系统启动之后,运行一次。

    1、放到ApplicationListener里运行

    @Slf4j
    @Component
    public class InitConfig implements ApplicationListener<ApplicationStartedEvent> {
        
        @Autowired
        private ISysJobService sysJobService;
        @Autowired
        private ISysDictTypeService sysDictTypeService;
        @Autowired
        private ISysConfigService sysConfigService;
    
        /**
         * 项目启动时,初始化参数
         */
        @Override
        public void onApplicationEvent(ApplicationStartedEvent event) {
            log.info("===> init param");
            sysConfigService.init();
            log.info("===> init dict");
            sysDictTypeService.init();
            try {
                log.info("===> init job");
                sysJobService.init();
            } catch (Exception e) {
                log.error("{}", e.getMessage(), e);
            }
        }
    }
    

    2、放到CommandLineRunner里面运行

    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.stereotype.Component;
    
    @Slf4j
    @Component
    public class ApplicationStartupRunner implements CommandLineRunner {
    
        @Autowired
        private RedisUtils redisUtils;
    
        @Override
        public void run(String... args) throws Exception {
            log.info("ApplicationStartupRunner run method Started !!");
            try {
                log.info("[CommandLineRunner]===> init initSipRule");
                redisUtils.initSipRule();
            } catch (Exception e) {
                log.error("ApplicationStartupRunner error. {}", e.getMessage(), e);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:springboot集成flyway,及启动后初始化问题解决Ap

          本文链接:https://www.haomeiwen.com/subject/wttsultx.html