Spring通过枚举来选择bean配置属性

时间:2017-06-19 12:59:42

标签: java spring config configuration-files

我的应用程序有两种运行模式:SHORT,LONG。 每种模式都有不同的源文件夹,在配置文件中定义。 假设用户将在运行时选择模式,如何设置所选文件夹?

public enum Mode {
        SHORT,
        LONG
}

config.properties:

short.dir = short_test
full.dir = full_test 

@Configuration
@PropertySource({"classpath:config/config.properties"})
public class runJob {
    @Value("${default.dir}")
    private String folder;

}

谢谢,肺门

1 个答案:

答案 0 :(得分:1)

不确定根据用户输入在运行时修改配置是个好主意。我想你应该收集所有需要的配置,例如Map,并通过这个运行时变量获取它们。 E.G:

public enum Mode {
        SHORT,
        LONG
}

@Configuration
@PropertySource("classpath:config/config.properties")
public class AppConfig {
   @Value("${short.mode.dir}")
   private String shortModeDir;
   @Value("${long.mode.dir}")
   private String longModeDir;

   private volatile Map<Mode, String> configurationMap = new HashMap<>();

   @PostConstruct
   public void setUp() {
       configurationMap.put(Mode.SHORT, shortModeDir);
       configurationMap.put(Mode.LONG, longModeDir);
   }

   public String getDirectoryByMode(Mode mode) {
       return configurationMap.get(mode);
   }
}

您可以使用方法getDirectoryByMode来获取所需的配置。