首页 > 解决方案 > 使用 spring-boot 2.0.2.RELEASE 并且 FlyWay 没有运行。没有错误

问题描述

我有一个非常简单的设置,全新的项目,并且由于某种原因 Flyway 从未初始化。没有错误。我花了几个小时试图弄清楚我做错了什么,但无济于事。

此外,我使用 Spring Boot 版本 1.4.2.RELEASE 在另一个项目上完成了几乎相同的设置。唯一的区别是 application.yml 中的 Flyway 配置现在位于“spring”上下文中,而不是位于根目录下。

如果有人能看到我遗漏的内容,或者错字或其他内容,我将不胜感激。

我还尝试注释掉 flyway 特定的数据源配置,以便它只使用 spring 数据源,但这没有任何区别。

谢谢, 托尼亚

pom.xml(相关部分):

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.2.RELEASE</version>
</parent>

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

application.yml(相关部分)

spring.profiles: default

spring:
    flyway:
        url: jdbc:mysql://localhost:3306/test_schema?tinyInt1isBit=false
        user: adminuser
        password: adminuser

    datasource:
        url: jdbc:mysql://localhost:3306/test_schema?tinyInt1isBit=false
        username: restricteduser
        password: restricteduser
        driver-class-name: com.mysql.jdbc.Driver

    jpa:
        database: MYSQL
        hibernate.ddl-auto: none
        show-sql: true
        properties.hibernate.dialect: org.hibernate.dialect.MySQL5InnoDBDialect

数据库设置脚本:

CREATE SCHEMA `test_schema`;

CREATE USER IF NOT EXISTS 'restricteduser'@'%' IDENTIFIED BY 'restricteduser';
GRANT SELECT,INSERT,UPDATE,DELETE ON test_schema.* TO 'restricteduser'@'%' WITH GRANT OPTION;

CREATE USER IF NOT EXISTS 'adminuser'@'%' IDENTIFIED BY 'adminuser';
GRANT ALL PRIVILEGES ON test_schema.* TO 'adminuser'@'%' WITH GRANT OPTION;
GRANT SUPER ON *.* TO 'adminuser'@'%';
FLUSH PRIVILEGES;

src -> main -> 资源 -> db -> 迁移 -> V1__create_test_schema.sql

DROP TABLE IF EXISTS `testing`;
CREATE TABLE `testing` (
  `id` VARCHAR(50) NOT NULL,
  `test_string` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=2;

日志输出:

2018-05-17 09:27:46.498  INFO 55086 --- [           main] ilmn.vqs.VqsApplication                  : Starting VqsApplication on ussd-olm-016438 with PID 55086 (/Users/tohrel/projects/variant-query-service/target/classes started by tohrel in /Users/tohrel/projects/variant-query-service)
2018-05-17 09:27:46.502  INFO 55086 --- [           main] ilmn.vqs.VqsApplication                  : The following profiles are active: default
2018-05-17 09:27:46.547  INFO 55086 --- [           main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@33c911a1: startup date [Thu May 17 09:27:46 PDT 2018]; root of context hierarchy
2018-05-17 09:27:47.636  INFO 55086 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8090 (http)
2018-05-17 09:27:47.659  INFO 55086 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2018-05-17 09:27:47.659  INFO 55086 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.31
2018-05-17 09:27:47.663  INFO 55086 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/Users/tohrel/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.]
2018-05-17 09:27:47.730  INFO 55086 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2018-05-17 09:27:47.731  INFO 55086 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1183 ms
2018-05-17 09:27:48.002  INFO 55086 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2018-05-17 09:27:48.002  INFO 55086 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-05-17 09:27:48.002  INFO 55086 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2018-05-17 09:27:48.002  INFO 55086 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2018-05-17 09:27:48.003  INFO 55086 --- [ost-startStop-1] .s.DelegatingFilterProxyRegistrationBean : Mapping filter: 'springSecurityFilterChain' to: [/*]
2018-05-17 09:27:48.003  INFO 55086 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpTraceFilter' to: [/*]
2018-05-17 09:27:48.003  INFO 55086 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'webMvcMetricsFilter' to: [/*]
2018-05-17 09:27:48.003  INFO 55086 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]
2018-05-17 09:27:48.095  INFO 55086 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-17 09:27:48.279  INFO 55086 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@33c911a1: startup date [Thu May 17 09:27:46 PDT 2018]; root of context hierarchy
2018-05-17 09:27:48.327  INFO 55086 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2018-05-17 09:27:48.328  INFO 55086 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2018-05-17 09:27:48.346  INFO 55086 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-17 09:27:48.346  INFO 55086 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-17 09:27:48.933  INFO 55086 --- [           main] o.s.s.web.DefaultSecurityFilterChain     : Creating filter chain: org.springframework.security.web.util.matcher.AnyRequestMatcher@1, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@70f822e, org.springframework.security.web.context.SecurityContextPersistenceFilter@1abfe081, org.springframework.security.web.header.HeaderWriterFilter@52d6cd34, org.springframework.security.web.csrf.CsrfFilter@65753040, org.springframework.security.web.authentication.logout.LogoutFilter@17b6d426, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@5e2a3040, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@5c1f6d57, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@5bb51241, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@c2e3264, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@4492eede, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@3efedc6f, org.springframework.security.web.session.SessionManagementFilter@27b2faa6, org.springframework.security.web.access.ExceptionTranslationFilter@61d84e08, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@3872bc37]
2018-05-17 09:27:48.966  INFO 55086 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-05-17 09:27:48.973  INFO 55086 --- [           main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@168cd36b: startup date [Thu May 17 09:27:48 PDT 2018]; parent: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@33c911a1
2018-05-17 09:27:49.006  INFO 55086 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'handlerExceptionResolver' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration; factoryMethodName=handlerExceptionResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.actuate.autoconfigure.web.servlet.WebMvcEndpointChildContextConfiguration; factoryMethodName=compositeHandlerExceptionResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/actuate/autoconfigure/web/servlet/WebMvcEndpointChildContextConfiguration.class]]
2018-05-17 09:27:49.033  INFO 55086 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8091 (http)
2018-05-17 09:27:49.034  INFO 55086 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2018-05-17 09:27:49.034  INFO 55086 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.31
2018-05-17 09:27:49.041  INFO 55086 --- [ost-startStop-1] o.a.c.c.C.[Tomcat-1].[localhost].[/]     : Initializing Spring embedded WebApplicationContext
2018-05-17 09:27:49.041  INFO 55086 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 68 ms
2018-05-17 09:27:49.057  INFO 55086 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]
2018-05-17 09:27:49.057  INFO 55086 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'springSecurityFilterChain' to: [/*]
2018-05-17 09:27:49.068  INFO 55086 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 1 endpoint(s) beneath base path ''
2018-05-17 09:27:49.076  INFO 55086 --- [           main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/healthcheck],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-05-17 09:27:49.093  INFO 55086 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public java.util.Map<java.lang.String, java.lang.Object> org.springframework.boot.actuate.autoconfigure.web.servlet.ManagementErrorEndpoint.invoke(org.springframework.web.context.request.ServletWebRequest)
2018-05-17 09:27:49.097  INFO 55086 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-17 09:27:49.097  INFO 55086 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-05-17 09:27:49.106  INFO 55086 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@168cd36b: startup date [Thu May 17 09:27:48 PDT 2018]; parent: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@33c911a1
2018-05-17 09:27:49.158  INFO 55086 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8091 (http) with context path ''
2018-05-17 09:27:49.167  INFO 55086 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8090 (http) with context path ''
2018-05-17 09:27:49.169  INFO 55086 --- [           main] ilmn.vqs.VqsApplication                  : Started VqsApplication in 3.075 seconds (JVM running for 3.81)
2018-05-17 09:27:49.670  INFO 55086 --- [on(8)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2018-05-17 09:27:49.670  INFO 55086 --- [on(8)-127.0.0.1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2018-05-17 09:27:49.684  INFO 55086 --- [on(8)-127.0.0.1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 14 ms

标签: spring-bootflyway

解决方案


通过向 application.yml 添加“位置”配置,我能够让 FlyWay 按预期运行......就像这样:

spring:
    flyway:
        url: jdbc:mysql://localhost:3306/test_schema?tinyInt1isBit=false
        user: adminuser
        password: adminuser
        locations: classpath:/db/migration

根据这里的spring-boot文档:https ://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html ,我不应该配置该目录位置

默认情况下,它们位于名为 classpath:db/migration 的文件夹中,但您可以通过设置 spring.flyway.locations 来修改该位置

感谢任何人花费的任何时间。如果有人知道为什么我在使用默认位置时需要配置位置,请告诉我。

谢谢, 托尼亚


推荐阅读