环境切换及加载更多配置
1、环境切换
日常开发时,一般会有开发环境、预生产环境、生成环境等。开发时,可以定义不同环境的配置。环境配置文件的格式为:"app-{evn}.yml" 或 "app-{evn}.properties" ,比如:
配置文件 | 说明 |
---|---|
app.yml | 应用主配置文件(必然会加载) |
app-dev.yml | 应用开发环境配置文件 |
app-pro.yml | 应用生产环境配置文件 |
通过环境切换,实现配置切换。
2、四种指定环境的方式
方式 | 示例 | 备注 |
---|---|---|
(1) 主配置文件指定 "solon.env" 属性 | solon.env: dev | 以 yml 为例 |
(2) 启动时用系统属性指定 | java -Dsolon.env=pro -jar demo.jar | |
(3) 启动时用启动参数指定 | java -jar demo.jar --env=pro | |
(4) 启动时用系统环境变量指定 | docker run -e 'solon.env=pro' demo_image | 以 docker 为例 |
提醒:
- 方式的编号越大,优先级越高
- 会(且只会)自动加载内部的资源文件:"app-{evn}.yml" 或 "app-{evn}.properties"
- 后续被加载的配置文件,不支持再次指定环境
3、加载更多的配置
添加多个内部配置(在 app.yml 之外,添加配置加载)//v2.2.7 后支持
solon.config.load:
- "classpath:${solon.env}/jdbc.yml" #可以是环境相关的
- "classpath:${solon.env}/*.yml" #v2.7.6 后支持 * 表达式
- "classpath:app-ds-${solon.env}.yml" #可以是环境相关的
- "classpath:app-auth_${solon.env}.yml"
- "classpath:common/*.yml" #v2.7.6 后支持 * 表达式 #也可以环境无关的或者带目录的
- "classpath:docs.yml"
4、通过代码加载更多的配置
在应用启动类加载配置
//通过注解添加 (需要加在启动类上)
@Import(profiles = "classpath:demo.xml")
public class App {
public static void main(String[] args) {
Solon.start(App.class, args, app -> {
//启动时,通过接口添加
app.cfg().loadAdd("app-jdbc-" + app.cfg().env() + ".yml");
app.cfg().loadAdd("app-cache-" + app.cfg().env() + ".yml");
});
}
}
在模块插件里加载配置
//在插件里,通过接口添加
public class DemoPlugin impl Plugin{
@Override
public void start(AppContext context){
//一般用于添加模块内部的配置
context.cfg().loadAdd("demo.xml")
}
}
直接注入到某个配置类
@Inject("${classpath:demo.xml}")
@Configuration
public class DemoConfig {
...
}