Solon v3.0.6

环境切换及加载更多配置

</> markdown

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 {
    ...
}