今天有一个需求,就是在项目启动的时候向数据库里面插入一条数据。
第一种:继承 Spring 的 BeanPostProcessor 类,代码如下
但是这个方法必须无参,没有返回值的。代码如下:
但是这种hibernate 事务 总是不提交,所以结果是:启动的时候控制台有打印SQL语句,但是事务没有提交,数据库看不了数据。设置一下(<property name="connection.autocommit">true </property>)
就可以成功啦,但是设置了自动提交,对Spring管理Hibernate 就不好啦。
第三种:继承Spring 的 ApplicationListener 这个接口。借助Spring监听接口为数据库初始化数据,代码如下:
第一种:继承 Spring 的 BeanPostProcessor 类,代码如下
public class BeanPostPrcessorImpl implements BeanPostProcessor {
private ICompanyService companyService;
public ICompanyService getCompanyService() {
return companyService;
}
public void setCompanyService(ICompanyService companyService) {
this.companyService = companyService;
}
// Bean 实例化之前进行的处理
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("对象" + beanName + "开始实例化");
return bean;
}
// Bean 实例化之后进行的处理
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("对象" + beanName + "实例化完成");
List<User> list = companyService.findAll("from User");
if (list.size() <= 0) {
User user = new User();
user.setName("ahhffl");
user.setPassword("ahhffl");
companyService.addObject(user);
}
return bean;
}
}
但是每个bean 初始化的时候 这个类的方法都会被调用,而我只想插入一条数据,所以效率不好。
参考:http://blog.youkuaiyun.com/chensugang/archive/2008/12/01/3423650.aspx
第二种:想起可以用Spring 的init-method 这种方式,他可以再bean 实例化之后 初始化一个指定的方法,但是这个方法必须无参,没有返回值的。代码如下:
public void init() throws Exception {
System.out.println("JavaBean类init 方法");
List<User> list = basicDao.findAll("from User");
if(list.size() <= 0){
User user = new User();
user.setName("ahhffl");
user.setPassword("ahhffl");
basicDao.saveUser(user);
System.out.println(user.getName());
System.out.println(user.getPassword());
System.out.println(user.getId());
}
}
但是这种hibernate 事务 总是不提交,所以结果是:启动的时候控制台有打印SQL语句,但是事务没有提交,数据库看不了数据。设置一下(<property name="connection.autocommit">true </property>)
就可以成功啦,但是设置了自动提交,对Spring管理Hibernate 就不好啦。
第三种:继承Spring 的 ApplicationListener 这个接口。借助Spring监听接口为数据库初始化数据,代码如下:
public class ApplicationListenerImpl implements ApplicationListener {
private ICompanyService companyService;
public ICompanyService getCompanyService() {
return companyService;
}
public void setCompanyService(ICompanyService companyService) {
this.companyService = companyService;
}
@Override
public void onApplicationEvent(ApplicationEvent arg0) {
List<User> list = companyService.findAll("from User");
if(list.size() <= 0){
User user = new User();
user.setName("ahhffl");
user.setPassword("ahhffl");
companyService.addObject(user);
}
}
}
转载地址