Spring.flyway.init-sqls работает (как и ожидалось)? - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь настроить свойство spring.flyway.init-sqls на запуск небольшого оператора до того, как Flyway что-нибудь сделает со сценариями миграции, но я изо всех сил пытаюсь заставить его работать так, как я ожидал. У меня в application.yml есть следующее:

spring:
  datasource.url: <some url here>
  flyway.init-sqls: SET OWNER <owner of tables created via migration scripts>

Теперь в FlywayAutoConfiguration.FlywayConfiguration есть метод, который выглядит так:

private DataSource configureDataSource(FluentConfiguration configuration, FlywayProperties properties,
        DataSourceProperties dataSourceProperties, DataSource flywayDataSource, DataSource dataSource) {
    if (properties.isCreateDataSource()) {
        String url = getProperty(properties::getUrl, dataSourceProperties::determineUrl);
        String user = getProperty(properties::getUser, dataSourceProperties::determineUsername);
        String password = getProperty(properties::getPassword, dataSourceProperties::determinePassword);
        configuration.dataSource(url, user, password);
        if (!CollectionUtils.isEmpty(properties.getInitSqls())) {
            String initSql = StringUtils.collectionToDelimitedString(properties.getInitSqls(), "\n");
            configuration.initSql(initSql);
        }
    }
    else if (flywayDataSource != null) {
        configuration.dataSource(flywayDataSource);
    }
    else {
        configuration.dataSource(dataSource);
    }
    return configuration.getDataSource();
}

Это единственное место, где я могу найти любое использование spring.flyway.init-sqls, но я заметил, что properties.isCreateDataSource() никогда не возвращает true, если не определены spring.flyway.url или spring.flyway.user. Следовательно, код, использующий init-sqls, никогда не достигается.

Это ожидаемое поведение? Я ожидал, что пока установлен spring.datasource.url, необязательно определять spring.flyway.url, но, похоже, так оно и есть, потому что когда я делаю это, кажется, что он работает:

spring:
  datasource.url: <some url here>
  flyway:
    init-sqls: SET OWNER <owner of tables created via migration scripts>
    url: ${spring.datasource.url}

Итак, у меня есть обходной путь, но я хотел бы услышать, не хватает ли чего-то, что мне не хватает?

...