li630757345 2017-05-31 07:18 采纳率: 0%
浏览 2016

JAV类的静态变量在项目启动时初始化,在项目启动后怎么通过接口修改

@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> 
  • 写回答

1条回答

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-10-25 19:35
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 这篇文章:jav异常 也许能够解决你的问题,你可以看下

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥15 如何修改pca中的feature函数
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况