在springboot里,application.yml里的配置是没法直接在java里配置的,至少目前springboot没有提供在java配置里更改Environment配置值的方法。
但是application.yml里每一个可配置的选项一定对应着某个被@ConfigurationProperties注解标记过的配置类的某个属性(这种类一般是在添加spring-boot-starter依赖时额外导入的,专门用于适配application.yml或application.properties),而这种配置类是可以通过spring自动注入的,所以可以在你项目的java配置类里自动注入你想配置的配置bean,然后进行添加或更改等操作,必要时,可以使用@AutoConfigureBefore用于保证你的配置能够生效,即在相应spring插件使用配置前进行配置。
例子:
@Configuration
public class BaseConfiger {
@Autowired
private Environment environment;
@Autowired
private MybatisProperties mybatisProperties;
@PostConstruct
public void init() {
String delimiter = ",; \t\n";
String myTypeHandlersPackage = "com.dfhs.web.handler";
String typeHandlersPackage = mybatisProperties.getTypeHandlersPackage();
if(!StringUtils.isEmpty(typeHandlersPackage)) {
typeHandlersPackage += delimiter;
typeHandlersPackage += myTypeHandlersPackage;
}else {
typeHandlersPackage = myTypeHandlersPackage;
}
mybatisProperties.setTypeHandlersPackage(typeHandlersPackage);
}
@Bean
@Primary
public DataSource getDataSource() {
DruidDataSource ds = new DruidDataSource();
ds.setUrl(environment.getProperty("spring.datasource.url"));
ds.setDriverClassName(environment.getProperty("spring.datasource.driver-class-name"));
ds.setUsername(environment.getProperty("spring.datasource.username"));
ds.setPassword(environment.getProperty("spring.datasource.password"));
return ds;
}
}
这里通过注入mybatis的配置,对其添加了额外的typeHandlersPackage,由于这个BaseConfiger同样担负着生成DataSource的任务(mybatis依赖于DataSource),所以能够保证额外添加的配置在mybatis中生效。