@Component //如果有多个这样的类时,可以通过Order指定执行顺序,数值越小执行优先级越高 @Order(value = 0) public class InitSystemConfig implements CommandLineRunner ,EnvironmentAware{ @Autowired SystemConfigDao systemConfigDao; /* * 在服务启动后执行,会在@Bean实例化之后执行,故如果@Bean需要依赖这里的话会出问题 */ @Override public void run(String... args) throws Exception { //这里可以根据数据库返回结果创建一些对象、启动一些线程等 ConsumerSample.startConsumer(); } /* * 在SystemConfigDao实例化之后、@Bean实例化之前执行 * 常用于读取数据库配置以供其它bean使用 * environment对象可以获取配置文件的配置,也可以把配置设置到该对象中 */ @Override public void setEnvironment(Environment environment) { List<SystemConfig> list = systemConfigDao.getSystemConfig(); if(list != null && !list.isEmpty()){ for(SystemConfig systemConfig:list){ PropertiesUtil.setProperty(systemConfig.getConfigKey(), systemConfig.getConfigValue()); } } } }
SystemConfigDao是一个普通的dao,用于访问数据库,由于InitSystemConfig依赖于它,所以,SystemConfigDao会在InitSystemConfig之前被初始化。