java - Spring Boot 配置处理器,前缀的重复@ConfigurationProperties 定义

标签 java spring spring-boot spring-boot-configuration

在 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 build 可以工作(但是警告 When using @ConfigurationProperties it is recommended to add 'spring-boot-configuration-processor' to your classpath to generate configuration metadata出现)

构建.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")
}

应用程序属性

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

你好.应用

@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();
    }

}

提前致谢

最佳答案

我认为您对它的工作原理感到困惑。代码应该大部分保持不变。当您定义要在启动时加载的配置文件时,属性会发生变化。

application-dev.properties

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

application-prod.properties

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

并且只有一个 bean 设置数据源。

关于java - Spring Boot 配置处理器,前缀的重复@ConfigurationProperties 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45759694/

相关文章:

java - 在无限循环中使用 BufferedWriter

java - Java Streams的内部实现是什么

Java Web Start 尝试下载不存在的库 org.springframework.core

Intellij 无法解析 Spring bean 范围租户

java - 如何通过手机访问servlet

java - hibernate 注解。 @Where 与 @WhereJoinTable

java - 您如何使用相同的@Qualifier 注入(inject)一个bean 列表?

mysql - Mysql中的微服务实现(关系型数据库结构)

java - Spring Rest中如何同时使用@Pathvariable和@RequestParam

java - Spring boot 未格式化的 BadCredentialsException