Почему flyway не создал таблицу? - PullRequest
1 голос
/ 18 октября 2019

Я недавно работал с flyway в springboot и у меня такой вопрос. Почему flyway не создал базу данных? Я только что добавил зависимость flyway в свой build.gradle, который теперь выглядит следующим образом.

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.properties:

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

И файл миграции, который находится в ресурсах / db /igration:

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]

upd: application.properties:

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? Или как это можно исправить?

1 Ответ

0 голосов
/ 18 октября 2019

Flyway ожидает, что будет существующая база данных, на которой вы сможете выполнить миграцию. Попробуйте создать базу данных, добавьте URL источника данных, имя пользователя и пароль. Затем снова запустите ваше приложение, и geo_table будет создан для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...