有哪些方法 实现服务启动之后,马上执行相关操作?
方式一 :@PostConstruct
对类的要求
无,普通的java bean即可
例如:
/***
* 执行完构造方法之后就会执行该方法
*/
@PostConstruct
public void init() {
System.out.println("初始化字典");
refresh2();
}
执行时机
类实例化之后
方式二: 实现org.springframework.context.ApplicationListener 的onApplicationEvent方法
对类的要求
必须使用SpringMVC的注解@Configuration ,
实现org.springframework.context.ApplicationListener 的onApplicationEvent方法
示例
例如:
/***
* Spring容器加载完成触发,可用于初始化环境,准备测试数据、加载一些数据到内存
* @param contextRefreshedEvent
*/
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
configType=getProperty("ConfigType");
SpringMVCUtil.addCustomPropertySources(this.zookeeperSources, env);
mkdirLogFolder(logFilePath);
}
方式三:使用定时器
对类的要求
无,普通的java bean即可
例如:
/***
* 做一些初始化操作
* 在服务启动后马上执行,并仅执行一次.
*/
public class ConfigInitSchedule {
@Resource
private DictionaryParam dictionaryParam;
public void initDictionary() {
System.out.println("refresh dictionary ");
dictionaryParam.refresh2();
}
}
执行时机
web服务(tomcat 或jetty)启动之后
配置
spring-quartz.xml的配置:
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">