CommandLineRunner、EnvironmentAware在Spring boot启动时执行初始化代码


@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之前被初始化。

除了上面这些方式,我们还能用注解@PostConstruct修饰方法来实现在类实例化之后(构造函数调用之后)去执行某些操作,如:

@Service
public class Test{
	@PostConstruct
	public void myInit(){
		//TODO 类实例化之后需要做的初始化操作
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值