Spring在服务器启动时获取数据库表值

时间:2015-11-19 12:14:43

标签: database spring hibernate server startup

我们正在创建一个spring和hibernate应用程序并使用旧数据库。 我们的要求是在服务器启动时从少数数据库表中获取值。 我们计划将这些值放在属性文件中。因此,我们不需要一次又一次地为这些值获取DB。 我们使用ApplicationListener在启动时使用以下stackoverflow问题获取挂钩: - Listener for server starup and all spring bean loaded completely

使用的代码如下

@Component
public class SpringContextListener implements ApplicationListener<ContextRefreshedEvent> {

  private List<Yosemitecompany> companyList = new ArrayList<Yosemitecompany>();


    private YosemitecompanyRI iYosemitecompanyBO;

    public SpringContextListener(){

    }

    public SpringContextListener(YosemitecompanyRI iYosemitecompanyBO) {
        this.iYosemitecompanyBO = iYosemitecompanyBO;
    }

 public void onApplicationEvent(final ContextRefreshedEvent event) {
  System.out.println("ApplicationListener Started"+iYosemitecompanyBO);
  if(companyList == null || (companyList != null && companyList.size() <= 0) && iYosemitecompanyBO != null)
  {
    companyList = iYosemitecompanyBO.getCompanyDetailsWithStatus();
      }
   }

 public List<Yosemitecompany> getCompanyList()
{
    return companyList;
}

  }

这是存储库类

@Repository
@Transactional
public class YosemitecompanyRI implements IYosemitecompanyR{

static final Logger log = Logger.getLogger("YosemitecompanyDAOI");

@Autowired
private SessionFactory sessionFactory;

protected Session getSession() {
    log.info(sessionFactory);
    if (sessionFactory != null)
        return sessionFactory.getCurrentSession();
    else
        return null;
}

@Override

public List<Yosemitecompany> getCompanyDetailsWithStatus()
{
    List<Yosemitecompany> results = new ArrayList<Yosemitecompany>();
    log.info("reached "+getSession());
    if(getSession() != null)
    {
        log.info("executing query");
        Criteria cr = getSession().createCriteria(Yosemitecompany.class);
        cr.add(Restrictions.eq("cmpstatus",new BigDecimal(1)));
        results = (List<Yosemitecompany>)cr.list();
    }
    return results;
  }
 }

现在在服务器启动时...我将sessionFactory始终作为null ..所以我的代码永远不会被执行。

我是Spring和Hibernate的新手。如果这种方法很好,那么请帮助我知道我做错了什么。如果有更好的方法可以实现,请同时提出建议。

提前致谢。

0 个答案:

没有答案