Spring Boot Configuration Processor, повторяющееся определение @ConfigurationProperties для префикса

В приложении Spring Boot я хочу использовать @ConfigurationProperties аннотация с одинаковым префиксом для настройки двух моих источников данных в зависимости от профиля. Почему это запрещено процессором конфигурации Spring Boot? Ошибка, сообщаемая gradle:

...
:compileJava ... error: Duplicate `@ConfigurationProperties` definition for prefix 'spring.datasource'

Заметки:

  • "Run As-> Spring Boot App" работает в STS
  • Без зависимости Spring-Boot-Configuration-Processor работает сборка Gradle (но предупреждение When using @ConfigurationProperties it is recommended to add 'spring-boot-configuration-processor' to your classpath to generate configuration metadata появляется)

build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.6.RELEASE")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

repositories {
    mavenCentral()
    maven { url "https://repository.jboss.org/nexus/content/repositories/releases" }
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile 'org.springframework.boot:spring-boot-configuration-processor:1.5.4.RELEASE'
    compile("com.h2database:h2")
}

application.properties

spring.datasource.driverClassName = org.h2.Driver
spring.datasource.username = sa
spring.datasource.password = sa

hello.Application

@SpringBootApplication
public class Application {

    public static void main(final String[] args) {
        final SpringApplication app = new SpringApplication(Application.class);
        app.setAdditionalProfiles("prod");
        app.run();
    }

    @Bean
    @Profile("dev")
    @ConfigurationProperties("spring.datasource")
    public DataSource dataSourceDev() {
        return DataSourceBuilder
                .create()
                .url(generateDevUrl())
                .build();
    }

    @Bean
    @Profile("prod")
    @ConfigurationProperties("spring.datasource")
    public DataSource dataSourceProd() {
        return DataSourceBuilder
                .create()
                .url(generateProdUrl())
                .build();
    }

}

заранее спасибо

1 ответ

Я думаю, что вы не знаете, как это работает. Код в основном должен оставаться прежним. Свойства меняются, когда вы определяете, какой профиль загружать при запуске.

application-dev.properties

spring.datasource.driverClassName = org.h2.Driver

spring.datasource.username = saspring.datasource.password = saspring.datasource.url=

appilication-prod.properties

spring.datasource.driverClassName = org.h2.Driverspring.datasource.username = saspring.datasource.password = saspring.datasource.url=

И только один компонент настраивает источник данных.

Другие вопросы по тегам