Solon2 开发之IoC,一、注入或手动获取配置
约定
resources/app.yml( 或 app.properties ) #为应用配置文件
配置样例
track:
name: xxx
url: http://a.a.a
db1:
jdbcUrl: "jdbc:mysql://..."
username: "xxx"
password: "xxx"
1、如何通过注入获得配置?
- 注入到字段
@Service
public class DemoService{
//注入值(带默认值:demoApi),并开启自动更新(注意:如果不是单例,请不要开启自动刷新)
@Inject(value="${track.name:demoApi}", autoRefreshed=true)
String trackName;
//注入值(没有时,不覆盖字段初始值)
@Inject("${track.url}")
String trackUrl = "http://x.x.x/track";
//注入配置集合
@Inject("${track.db1}")
Properties trackDbCfg;
//注入Bean(根据对应的配置集合自动生成并注入)
@Inject("${track.db1}")
HikariDataSource trackDs;
public DemoService(){
//注入的配置,不能在构造函数里使用。在生命周期时,构建先于注入
}
@Init
public void init(){
//注入的配置,需要进一步做初始化,请在处理
}
}
- 注入到配置器的构建参数(与注入字段的方式差不多)
@Configuration
public class DemoConfig{
//提示:@Bean 只能与 @Configuration 配合
@Bean
public DataSource db1(@Inject("${track.db1}") HikariDataSource ds) {
return ds;
}
@Bean
public DataSourceWrap db1w(@Inject DataSource ds, @Inject("${wrap}") WrapConfig wc) {
return new DataSourceWrap(ds, wc);
}
//也可以带条件处理
@Bean
public CacheService cache(@Inject("${cache.enable}") boolean enable,
@Inject("${cache.config}") CacheServiceSupplier supper){
if(enable){
return supper.get();
}else{
return null;
}
}
}
注意一下,配置名是通过${...}
模式去表示的。
2、如何手动获得配置?
- 给字段赋值
public class DemoService{
//获取值(带默认值:demoApi)
static String trackName = Solon.cfg().get("track.name", "demoApi");
//获取值
static String trackUrl = Solon.cfg().get("track.url");
//获取配置集合
Properties trackDbCfg = Solon.cfg().getProp("track.db1");
//获取bean(根据配置集合自动生成)
HikariDataSource trackDs = Solon.cfg().getBean("track.db1", HikariDataSource.class);
}
- 构建Bean给配置器用
@Configuration
public class DemoConfig{
@Bean
public DataSource db1() {
return Solon.cfg().getBean("track.db1", HikariDataSource.class);
}
@Bean
public DataSourceWrap db1w(@Inject DataSource ds) {
WrapConfig wc = Solon.cfg().getBean("wrap", WrapConfig.class);
return new DataSourceWrap(ds, wc);
}
}