spring中对配置文件映射的相关注解
参考文章:https://www.cnblogs.com/duanxz/p/4520571.html
文章中的版本可能比较低,注解属性不太一致;
1,对于.xml文件,使用@ImportResource("")
@ImportResource({"classpath:dubbo-${spring.profiles.active}.xml","classpath:elastic-job.xml","mybatis-config.xml"})
2,对于.properties文件,使用@PropertySource("")
@PropertySource("classpath:xxl-${spring.profiles.active}.properties")
引入之后,可以配合@Value("${xxl.job.executor.ip}")将对应的配置映射到相应的属性中;
映射类的必须是spring管理,所以类上必须加上@Configuration或者@Component;
3,对于某些配置类,可以整体映射,一次映射多个属性;
@ConfigurationProperties(prefix = "")
对于该标签,有相关注意事项:
类的字段必须有公共 setter 方法;
1,@EnableConfigurationProperties({AInstance.class}) + AInstance类标注@ConfigurationProperties(prefix = "");
如果是引用外部的类,即需要映射的类没有办法直接交给spring管理,没法在类上标上@Component标签:
那么可以在使用该属性的类上标注@EnableConfigurationProperties({AInstance.class}),使spring感知到AInstance类,
AInstance类上必须标注@ConfigurationProperties(prefix = "");
2,@Component/@Configuration + @ConfigurationProperties(prefix = "");
如果是自定义的类,那么在该类上标注@Component/@Configuration + @ConfigurationProperties(prefix = ""),
那么配置文件中的属性会自动映射到属性中;
3,@Bean + @ConfigurationProperties(prefix = "");
如果是外部引用的类,而且该类上也没有@ConfigurationProperties(prefix = "");
那么可以使用@Bean + @ConfigurationProperties(prefix = ""),两个标签一起使用的方法上;
使用该方法返回的DataSource,就已经存在配置文件中的相关属性了;
@Bean(name="dataSource") @ConfigurationProperties(prefix = "dataSource.master") public DataSource masterDbSource() { return DataSourceBuilder.create().build(); }
当然如果上例中的DataSource类上有@ConfigurationProperties(prefix = ""),【假设存在,实际上不存在该标签】
那么@Bean方法上的@ConfigurationProperties(prefix = "")是可以省略的;
@Bean(name="dataSource") //@ConfigurationProperties(prefix = "dataSource.master") public DataSource masterDbSource() { return DataSourceBuilder.create().build(); } @ConfigurationProperties(prefix = "dataSource.master") class DataSource { }
其实,spring中yml配置文件某些存在对应的类:
例如,mybatis配置类


对应的类的相关属性为:
@ConfigurationProperties( prefix = "mybatis" ) public class MybatisProperties { public static final String MYBATIS_PREFIX = "mybatis"; private static final ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); private String configLocation; private String[] mapperLocations; private String typeAliasesPackage; private Class<?> typeAliasesSuperType; private String typeHandlersPackage; private boolean checkConfigLocation = false; private ExecutorType executorType; private Class<? extends LanguageDriver> defaultScriptingLanguageDriver; private Properties configurationProperties; @NestedConfigurationProperty private Configuration configuration; public MybatisProperties() { } //省略... }
那么引入配置类的方式就有两种:
方式1:在使用该属性的类上(位置可以自选)使用,@EnableConfigurationProperties({MybatisProperties .class})
方式3:
@Bean public MybatisProperties mybatisProperties() { return new MybatisProperties(); }

浙公网安备 33010602011771号