当前位置: 首页 > 知识库问答 >
问题:

为什么flyway没有创建表?

葛俊
2023-03-14

我最近在springboot和flyway一起工作,我有这样一个问题。为什么flyway没有创建数据库?我刚刚在我的build.gradle中添加了一个flyway依赖项,现在看起来是这样的。

dependencies {
    implementation 'org.springframework:spring-orm:5.1.5.RELEASE'
    implementation 'org.hibernate.search:hibernate-search-backend-lucene:6.0.0.Beta1'
    implementation 'org.hibernate.search:hibernate-search-mapper-orm:6.0.0.Beta1'
    implementation 'org.postgresql:postgresql:42.2.5'

    compile group: 'org.springframework.boot', name: 'spring-boot-starter-jdbc', version: '2.1.8.RELEASE'
    compile group: 'com.vividsolutions', name: 'jts', version: '1.13'
    compile('org.flywaydb:flyway-core:6.0.6')
}

我这样配置数据源:

@Configuration
@EnableTransactionManagement
@PropertySource("classpath:hibernate.properties")
public class HibernateConfig {

    @Autowired
    private Environment env;

    @Bean
    public DataSource dataSource() {
        final DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
        dataSourceBuilder.driverClassName("org.postgresql.Driver");
        dataSourceBuilder.url("jdbc:postgresql://localhost:5432/geo_test");
        dataSourceBuilder.username("postgres");
        dataSourceBuilder.password("root");
        return dataSourceBuilder.build();
    }

    @Bean
    public LocalSessionFactoryBean sessionFactory() {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setPackagesToScan("com.test.hibernate.domain");
        sessionFactory.setHibernateProperties(hibernateProperties());
        return sessionFactory;
    }

    @Bean
    public HibernateTransactionManager getTransactionManager() {
        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
        transactionManager.setSessionFactory(sessionFactory().getObject());
        return transactionManager;
    }

    private Properties hibernateProperties() {
        final Properties properties = new Properties();
        properties.put(AvailableSettings.DIALECT, env.getRequiredProperty("hibernate.dialect"));
        properties.put(AvailableSettings.SHOW_SQL, env.getRequiredProperty("hibernate.show_sql"));
        properties.put(AvailableSettings.POOL_SIZE, env.getRequiredProperty("hibernate.connection_pool_size"));
        properties.put("hibernate.search.default_backend", env.getRequiredProperty("hibernate.search.default_backend"));
        properties.put("hibernate.search.backends.myBackend.type", env.getRequiredProperty("hibernate.search.backends.myBackend.type"));
        properties.put(AvailableSettings.HBM2DDL_AUTO, env.getRequiredProperty("hibernate.hbm2ddl.auto"));
        return properties;
    }
}

这里是我的Hibernate。属性:

hibernate.dialect=org.hibernate.dialect.PostgresPlusDialect
hibernate.search.default_backend=myBackend
hibernate.search.backends.myBackend.type=lucene
hibernate.show_sql=true
hibernate.connection_pool_size=1
hibernate.hbm2ddl.auto=validate

和迁移文件,位于resources/db/migration中:

create sequence hibernate_sequence start 1 increment 1;

create table geo_table (
    point_id int8 not null,
    latitude float8 not null,
    longitude float8 not null,

    primary key (point_id)
);
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'searchServiceImpl': Unsatisfied dependency expressed through field 'sessionManager'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionManager': Unsatisfied dependency expressed through field 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [com/test/hibernate/config/HibernateConfig.class]: Invocation of init method failed; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [geo_table]
spring.flyway.url=jdbc:postgresql://localhost:5432/geo_test
spring.flyway.schemas=public
spring.flyway.user=postgres
spring.flyway.password=root
spring.flyway.baseline-version=1
spring.flyway.locations=classpath:db/migration
spring.flyway.enabled=true

有什么问题?是否应该在Application.Properties中配置datasource?或者如何修复?

共有1个答案

左丘烨烁
2023-03-14

Flyway希望有一个现有的数据库可供您运行迁移。尝试创建数据库,添加数据源url、用户名和密码。然后重新运行应用程序,将为您创建geo_table。

 类似资料:
  • 我一直在尝试使用springboot和flyway创建一个web应用程序。构建工具是Gradle。然而,当我尝试运行程序时,Flyway只创建了一个名为Flyway_schema_hystory的表,但不从SQL脚本创建表。脚本<code>V1__Create_all_tables。sql位于正确的包中。<code>构建中的依赖项。添加了gradle</code>,在<code>应用程序中添加了f

  • 问题内容: 我一直在关注Docker教程,并通过对现有映像进行更改并用三个不同的标签对其进行标记,在本地OSX计算机上构建了测试映像: 但是,这些图像都没有摘要: 我使用Dockerfile创建的其他测试映像也有摘要。 为什么有些图像有摘要,而有些则没有? 它与创建映像的方式(是否为Dockerfile)有关吗? 问题答案: 首先,请记住,摘要可以代表一个,一个图层或它们的组合(我们通常将该组合称

  • 问题内容: 我正在尝试做这样的事情: 不幸的是,即使在Java 9中也不存在。 为什么它被遗漏了? 建议的解决方法是什么? 问题答案: 为什么它被遗漏了? 该API提供了可重用的构建块。这里的相关积木是,,。通过这些,您可以实现所需的功能:将流内映射到对象,然后获得平面图。提供构建基块的排列是不切实际的,并且很难扩展。 建议的解决方法是什么? 如前所述,使用可用的构建基块(+ ):

  • 许多编译器都提供128位整数类型,但我使用过的编译器都没有提供typedefs。为什么? 据我回忆,标准 用于此目的的储量 鼓励提供此类类型的实现提供typedef 要求此类实现提供至少128位的intmax_t (而且,我不相信我使用了实际上符合最后一点的实现)

  • 我想用springboot和Mongo数据库对话。 它使用spring-boot-starter-data-mongoDB并自动配置默认bean,这确实允许我的MongoRepository类与DB进行对话。 但是,我想重写默认值。我可以使用application.properties,但我需要能够在应用程序启动时将连接参数作为选项在命令行上传递。 我已经尝试改变端口以破坏它,我已经将debug添

  • 问题内容: 我了解JSON,但不了解JSONP。Wikipedia上有关JSON的文档是JSONP的最高搜索结果。它说: JSONP或“带填充的JSON”是JSON扩展,其中将前缀指定为调用本身的输入参数。 ??什么电话 这对我来说毫无意义。JSON是一种数据格式。没有电话 在第二个搜索结果是由某些人叫雷米,谁写的这个约JSONP: JSONP是脚本标记注入,它将响应从服务器传递到用户指定的函数。