@RequestMapping("/refreshCacheData.do")
public String refreshCacheData() {
BasicDataDao basicDataDao = new BasicDataDao();
basicDataDao.load();
return "Refresh cache data success!";
}
通过这个接口去重新调用load()方法,貌似不行。
下面是类的定义:
@Repository
public class BasicDataDao extends BaseDaoImpl {
/** 同步的所有人员信息 */
static List<TSysStaff> users;
/** 按code和登录名缓存的人员map数据 */
static Map<Object, TSysStaff> usersMap;
/** 同步的所有人员归属部门信息 */
static List<TSysStaffOrg> usersOrg;
/** 按人员code缓存的人员归属部门map数据 */
static Map<Object, TSysStaffOrg> usersOrgMap;
/** 同步的所有部门机构信息 */
static List<TSysOrg> depts;
/** 按code缓存的组织部门信息 */
static Map<Object, TSysOrg> deptsMap;
/** 同步的所有SAP过来的日历信息 */
static List<TSysCalendar> calendars;
/** 同步的所有cost center的数据 */
static List<TSysCostcenter> costCenters;
/** 按code缓存的cost center信息 */
static Map<Object, TSysCostcenter> costcenterMap;
/** 同步的所有wbs的数据 */
static List<TSysWbs> wbss;
/** 按code缓存的wbs信息 */
static Map<Object, TSysWbs> wbsMap;
/** 同步的所有国家的数据 */
static List<TSysCountry> countries;
/** 按code缓存的国家信息 */
static Map<Object, TSysCountry> countryMap;
/** 同步的所有币种信息 */
static List<TSysCurrency> currencies;
/** 按code缓存的币种信息 */
static Map<Object, TSysCurrency> currenciesMap;
/** 同步的所有省份信息 */
static List<TSysProvince> provinces;
/** 按code缓存的省份信息 */
static Map<Object, TSysProvince> provinceMap;
/** 查询用户的SQL */
@Value("${basicdata.sql.users}")
private String usersSql;
/** 查询用户归属部门的SQL */
@Value("${basicdata.sql.users.org}")
private String usersOrgSql;
/** 查询部门的SQL */
@Value("${basicdata.sql.depts}")
private String deptsSql;
/** 查询日历的SQL */
@Value("${basicdata.sql.calendars}")
private String calendarsSql;
/** 查询cost center的SQL */
@Value("${basicdata.sql.costCenter}")
private String costCenterSql;
/** 查询wbs的SQL */
@Value("${basicdata.sql.wbs}")
private String wbsSql;
/** 查询国家的SQL */
@Value("${basicdata.sql.country}")
private String countrySql;
/** 查询省份的SQL */
@Value("${basicdata.sql.province}")
private String provinceSql;
/** 查询币种的SQL */
@Value("${basicdata.sql.currencies}")
private String currenciesSql;
/** 读取所有需要缓存到本地的基础数据 */
@PostConstruct
public void load() {
users = this.query(usersSql, TSysStaff.class);
usersMap = this.listToMap(users, "pkId", "staffCode", "staffEnName", "staffDisName");
usersOrg = this.query(usersOrgSql, TSysStaffOrg.class);
usersOrgMap = this.listToMap(usersOrg, "pkId", "staffCode");
calendars = this.query(calendarsSql, TSysCalendar.class);
costCenters = this.query(costCenterSql, TSysCostcenter.class);
costcenterMap = this.listToMap(costCenters, "pkId", "costcenterCode");
wbss = this.query(wbsSql, TSysWbs.class);
wbsMap = this.listToMap(wbss, "pkId", "wbsCode");
countries = this.query(countrySql, TSysCountry.class);
countryMap = this.listToMap(countries, "pkId", "countryCode");
provinces = this.query(provinceSql, TSysProvince.class);
provinceMap = this.listToMap(provinces, "pkId", "provinceCode");
depts = this.query(deptsSql, TSysOrg.class);
deptsMap = this.listToMap(depts, "pkId", "orgCode");
currencies = this.query(currenciesSql, TSysCurrency.class);
currenciesMap = this.listToMap(currencies, "pkId", "currencyCode");
}
/**
* 根据sql读取实体对象entityClass的列表,这个方法有可能不通过web访问,所以opensession.
*
* @param sql 查询SQL
* @param entityClass 实体类
* @param args 查询参数
* @return
*/
@SuppressWarnings("unchecked")
public <T> List<T> query(final String sql, final Class<T> entityClass, final Object... args) {
return getHibernateTemplate().execute(new HibernateCallback<List<T>>() {
@Override
public List<T> doInHibernate(Session session) throws HibernateException {
SQLQuery query = session.createSQLQuery(sql);
query.setResultTransformer(ColumnsToBeanResultTransformer.columnsToBean(entityClass));
if (args != null && args.length > 0) {
for (int i = 0, l = args.length; i < l; i++) {
query.setParameter(i, args[i]);
}
}
List<T> list = query.list();
return list;
}
});
}
/**
* 将实体列表转换为map,key为每个实体对象的propertyNames属性的值
*
* @param list 实体对象列表
* @param propertyNames 作为map的key的属性名.每个对象会使用其对应的属性名作为map的key
* @return
*/
public <T> Map<Object, T> listToMap(List<T> list, String... propertyNames) {
Map<Object, T> map = new LinkedHashMap<Object, T>();
for (T e : list) {
for (String propertyName : propertyNames) {
map.put(BeanHelper.getPropertyValue(e, propertyName), e);
}
}
return map;
}
/**
* 所有人员数据.
*
* @return 所有员工基础数据
*/
public static List<TSysStaff> getUsers() {
return users;
}
/**
* 根据人员代码或登录名读取人员数据
*
* @param code 人员代码或登录名
* @return 代码或登录名为code的人员
*/
public static TSysStaff getUser(String code) {
return usersMap.get(code);
}
/**
* 根据人员代码或登录名读取人员数据
*
* @param disName 人员显示名字
* @return 显示名字为disName的人员
*/
public static TSysStaff getUserByDisName(String disName) {
return usersMap.get(disName);
}
//模糊查询
public static List<TSysStaff> getUserLikeSearchWithDisName(String disName) {
List<TSysStaff> tSysStaffs = new ArrayList<>();
for(TSysStaff tSysStaff : users){
if(!StringUtils.isEmpty(tSysStaff.getStaffDisName()) && tSysStaff.getStaffDisName().contains(disName)){
tSysStaffs.add(tSysStaff);
}
}
return tSysStaffs;
}
/**
* 根据人员代码读取人员归属机构数据
*
* @param code 人员代码
* @return 人员归属机构数据
*/
public static TSysStaffOrg getUserOrg(String code) {
return usersOrgMap.get(code);
}
/**
* 根据人员代码读取人员归属机构数据
*
* @param code 人员代码
* @return 人员归属机构数据
*/
public static List<TSysCalendar> getTSysCalendar() {
return calendars;
}
/**
* 所有组织部门数据
*
* @return 所有组织部门数据
*/
public static List<TSysOrg> getDepts() {
return depts;
}
/**
* 根据部门代码读取数据
*
* @param code 部门代码
* @return 代码为code的部门
*/
public static TSysOrg getDept(String code) {
return deptsMap.get(code);
}
/**
* 所有cost center数据
*
* @return 所有cost center数据
*/
public static List<TSysCostcenter> getTSysCostcenters() {
return costCenters;
}
/**
* 根据cost center代码读取数据
*
* @param code cost center代码
* @return 代码为code的cost center
*/
public static TSysCostcenter getTSysCostcenter(String code) {
return costcenterMap.get(code);
}
/**
* 所有WBS数据
*
* @return 所有WBS数据
*/
public static List<TSysWbs> getTSysWbss() {
return wbss;
}
/**
* 根据wbs代码读取数据
*
* @param code wbs代码
* @return 代码为code的wbs
*/
public static TSysWbs getTSysWbs(String code) {
return wbsMap.get(code);
}
/**
* 所有国家数据
*
* @return 所有国家数据
*/
public static List<TSysCountry> getTSysCountries() {
return countries;
}
/**
* 根据国家代码读取数据
*
* @param code 国家代码
* @return 代码为code的国家
*/
public static TSysCountry getTSysCountry(String code) {
return countryMap.get(code);
}
/**
* 所有省份数据
*
* @return 所有省份数据
*/
public static List<TSysProvince> getTSysProvinces() {
return provinces;
}
/**
* 根据省份代码读取数据
*
* @param code 省份代码
* @return 代码为code的省份
*/
public static TSysProvince getTSysProvince(String code) {
return provinceMap.get(code);
}
/**
* 所有币种数据
*
* @return 所有组织部门数据
*/
public static List<TSysCurrency> getCurrencies() {
return currencies;
}
/**
* 根据币种代码得到币种数据
*
* @param code 币种代码
* @return 代码为code的币种数据
*/
public static TSysCurrency getCurrency(String code) {
return currenciesMap.get(code);
}
但是通过schedule却可以调用成功:
<bean id="refreshDBCache" class="com.*.common.dao.BasicDataDao"></bean>
<task:scheduled-tasks>
<task:scheduled ref="refreshDBCache" method="load" cron="0 0 0,12 * * ?" />
</task:scheduled-tasks>
不知道你这个问题是否已经解决, 如果还没有解决的话: