我有@CongfigurationProperties类
//@Component
@ConfigurationProperties
@PropertySource("classpath:typesofcharge.properties")
public class ChargeProperties {
private HashMap<String,String> charge=new HashMap<>();
public HashMap<String,String> getCharge()
{
return this.charge;
}
}
这是我的配置文件
@SpringBootApplication
@ComponentScan({"com.vehiclemanagement.config,com.vehiclemanagement.client,"
+ "com.vehiclemanagement.controller,"
+ "com.vehiclemanagement.exception,"
+ "com.vehiclemanagement.model,"
+ "com.vehiclemanagement.service"})
@EnableConfigurationProperties(ChargeProperties.class)
public class VehicleManagementConfig {
public static void main(String[] args) {
SpringApplication.run(VehicleManagementConfig.class, args);
}
}
如果我在ChargeProperties中使用@Component批注并在Configuration类中删除ChargeProperties.class批注,则会正确初始化Charge HashMap
如果我删除@Component并传递ChargeProperties.class作为这样的参数 @EnableConfigurationProperties(ChargeProperties.class)就像文档说的那样,当我运行时,费用HashMap为空
我正在使用Spring Boot 2.0.2版本。但是,我正在关注最新文档。谁能解释为什么这不能按照文件建议的方式进行
属性文件的内容如下
更新属性文件的内容如图所示
#DO NOT MODIFY THIS FILE
charge.peak=Double_rate;
charge.lateNight=duration_based_charge;
charge.earlyMorning=special_offers;
答案 0 :(得分:1)
在ChargeProperies.class
注释上指定@EnableConfigurationProperties
时,它将通过EnableConfigurationPropertiesImportSelector
内的@EnableConfigurationProperties
类注册为bean。
因此,在此示例中,如果仅用ChargeProperties
注释了@ConfigurationProperties
类,它将创建一个chargeProperties
且带有空电荷HashMap
的bean,因为它默认返回到以application.properties为源。
可以使用@PropertySource
指定自定义来源。
@PropertySource批注提供了一种方便的声明性机制来添加 Spring环境的PropertySource。结合使用 使用@Configuration类。
根据上面的文档,要使用@PropertySource
加载自定义源,必须使用@Configuration
批注。
@Configuration
@PropertySource("classpath:typesofcharge.properties")
在内部,@Configuration
类是@Component
。
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Configuration
对您的问题。通过指定不带@PropertySource
的自定义@Configuration
,spring不会在@PropertySource
批注中加载属性,并且默认返回给application.properties。
答案 1 :(得分:0)
如果使用@PropertySource,则必须使用component,否则将无法读取属性
因为我们添加了@ComponentScan,所以我们根本不必提及@EnableConfiguationProperties批注。propety类对象可以自动装配为Bean