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 = sa
spring.datasource.password = sa
spring.datasource.url=
appilication-prod.properties
spring.datasource.driverClassName = org.h2.Driver
spring.datasource.username = sa
spring.datasource.password = sa
spring.datasource.url=
И только один компонент настраивает источник данных.