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

 

posted @ 2022-04-21 17:32  豆浆不要糖  阅读(357)  评论(0)    收藏  举报