Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Boot配置处理器,前缀的@ConfigurationProperties定义重复_Java_Spring_Spring Boot_Spring Boot Configuration - Fatal编程技术网

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

Java Spring Boot配置处理器,前缀的@ConfigurationProperties定义重复,java,spring,spring-boot,spring-boot-configuration,Java,Spring,Spring Boot,Spring Boot Configuration,在Spring Boot应用程序中,我希望使用前缀相同的@ConfigurationProperties注释根据配置文件配置两个数据源。为什么Spring引导配置处理器禁止它?gradle报告的错误为: ... :compileJava ... error: Duplicate `@ConfigurationProperties` definition for prefix 'spring.datasource' 注: “运行方式->Spring启动应用程序”在STS中工作 如果没有spri

在Spring Boot应用程序中,我希望使用前缀相同的
@ConfigurationProperties
注释根据配置文件配置两个数据源。为什么Spring引导配置处理器禁止它?gradle报告的错误为:

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

  • “运行方式->Spring启动应用程序”在STS中工作
  • 如果没有spring boot配置处理器依赖项,gradle build就可以工作(但是当使用@ConfigurationProperties时,建议将“spring boot配置处理器”添加到类路径以生成配置元数据时,会出现警告
格雷德尔先生

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=
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=
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=sa
spring.datasource.url=

只有一个bean设置了数据源。

这些bean完全相同,为什么您甚至需要这种配置?!我的产品代码更复杂。我把它简化得太多了。我刚刚更新了我的示例代码。尽管如此,看起来您仍然在做一些不应该做的事情。你为什么需要这个?imho的主要问题是,您有不同的方法来生成URL。但这在代码中是不应该有的,但在配置中是不应该的。。这种设置使用intelij工作,但当我试图用gradle编译时,它抛出了一个错误。“错误:重复…”您有解决方案吗?对于数据源,这不是一个好的示例。我的问题更一般:我想创建多个bean,这些bean具有在
application.properties
中定义的一些公共属性、在
application-.properties
中定义的一些配置文件特定属性以及一些必须编程的“运行时属性”。我想使用
@ConfigurationProperties
来处理公共和配置文件特定属性(以避免在我的
@Configuration
类中有多个
@Value
标记和
setProp()
)。