java - spring boot @EnableConfigurationProperties 标记内部类发生异常
问题描述
spring 5.1.9-RELEASE spring boot 2.1.7-RELEASE 当我有内部类要注册时,我在 A 类和 B 类上使用 @EnableConfigurationProperties 标记,此时发生异常;我去掉A类注解;此时启动成功;B类使用@EnableConfigurationProperties注册C,此时B也注册了,B类此时应该注册吗?但是当我将两个内部类移动到与TestConfiguration相同的路径时,A类和B类都必须注解@EnableConfigurationProperties才能完成启动
package com.test.configuration;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.test.configuration.TestConfiguration.TestConfigB;
import lombok.Data;
@Configuration
@EnableConfigurationProperties(TestConfigB.class)
public class TestConfiguration {
@Bean
@ConditionalOnMissingBean(TestConfigA.class)
@ConditionalOnProperty(prefix = "test-a", name = "enable", havingValue = "true", matchIfMissing = true)
public TestConfigA testConfigA(TestConfigB testConfigB) {
return new TestConfigA();
}
@Data
public class TestConfigA {
private String name;
}
@Data
@ConfigurationProperties(prefix = "test-b")
@EnableConfigurationProperties(TestConfigC.class)
public class TestConfigB {
private String applicationId;
@Autowired
TestConfigC axxcConfig;
public String getApplicationId() {
if (applicationId == null) {
applicationId = axxcConfig.getApplicationId();
}
return applicationId;
}
}
@ConfigurationProperties(prefix = "test-c")
public class TestConfigC implements ApplicationContextAware {
private String applicationId;
private ApplicationContext applicationContext;
public String getApplicationId() {
if (applicationId == null) {
applicationId = applicationContext.getEnvironment().getProperty("spring.application.name");
}
return applicationId;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
}
解决方案
您的@ConfigurationProperties
类需要static
这样才能独立于(之前)包含的配置类创建它们的副本。
推荐阅读
- c# - Firebase数据库数据提取排序问题
- javascript - 如何让源地图在 Webpack 中工作?
- javascript - 捕获异步函数中的错误并通过 jest 进行测试
- c++ - 我需要根据 timeval 删除向量元素
- android - 在 Ionic 4 中处理后退按钮的问题
- svg - 如何使用 Javascript 在圆形 SVG 内添加文本?
- python - 为什么我的箱线图没有出现在 python 中?
- git - .gitignore 不会忽略包含 .git 子目录的目录吗?
- apache - Apache SSL chrome 错误:NET::ERR_CERT_AUTHORITY_INVALID
- typescript - 泛型类的工厂方法