實現這個功能為什么會帶上單例模式, 單例用在這類功能實現,能降低內存消耗,所有涉及到的參數只需要申明一次。
public static AAAAYulebaoShareSingleton getInstance(){ if(instance == null){ instance = new AAAAYulebaoShareSingleton(); instance.infoFirstPageJSONObject=new JSONObject(); instance.shareJSONArray=new JSONArray(); //資源首頁數據 instance.resourceFirstPageJSONObject=new JSONObject(); //渠道首頁數據 instance.qudaoFirstPageJSONObject=new JSONObject(); instance.memberPriceSheetJSONArray=new JSONArray(); instance.userTokenObject=new JSONObject(); instance.alipayOnlineBuyDictionary=new JSONObject(); instance.EchoServer=new EchoServer(); //間隔1分鍾更新一次公用緩存執行 instance. executor = Executors.newScheduledThreadPool(1); instance.executor.scheduleAtFixedRate( instance.EchoServer, 0, 60000, TimeUnit.MILLISECONDS); //下面兩個參數作用是對比判斷是否當前是第二天,因為有隔天更新的數據 instance. secondDayUpdateData=DateFormatUtils.format(new Date(), "yyyy-MM-dd"); instance.secondDayUpdateDataTemp=instance. secondDayUpdateData; return instance; } else { return instance; } } public static class EchoServer implements Runnable { @Override public void run() { synchronized (EchoServer.class) { if( !instance.infoFirstPageJSONObject.isNull("rows")) { instance.mysqlParameter=new String[]{}; instance.shareJSONArray=MySqlHepler2.getInstance() .executeQueryT("select count(*) as count from publishProductShareInfoSheet",instance.mysqlParameter); instance.resourceFirstPageJSONObject=instance.shareJSONArray.getJSONObject(0); instance.shareInt =instance.resourceFirstPageJSONObject.getInt("count"); instance.mysqlParameter=new String[]{"已通過","1", "10"}; instance.shareJSONArray=new JSONArray(); instance.shareJSONArray= MySqlHepler2.getInstance().executeQueryT("SELECT * FROM publishProductShareInfoSheet where verifyStatus=? ORDER BY sourceVip DESC, whetherSetTop DESC, id DESC limit ?,?",instance.mysqlParameter); instance.resourceFirstPageJSONObject=new JSONObject(); instance.resourceFirstPageJSONObject.put("results", instance.shareInt); instance.resourceFirstPageJSONObject.put("rows", instance.shareJSONArray); instance.resourceFirstPageJSONObject.put("status", "success"); instance.resourceFirstPageJSONObject.put("msg", "查詢成功"); instance.mysqlParameter=new String[]{}; instance.shareJSONArray=MySqlHepler2.getInstance() .executeQueryT("select count(*) as count from qudaoShareSheet",instance.mysqlParameter); instance.qudaoFirstPageJSONObject=instance.shareJSONArray.getJSONObject(0); instance.shareInt =instance.qudaoFirstPageJSONObject.getInt("count"); instance.mysqlParameter=new String[]{"已通過","1", "10"}; instance.shareJSONArray=new JSONArray(); instance.shareJSONArray= MySqlHepler2.getInstance().executeQueryT("SELECT * FROM qudaoShareSheet where verifyStatus=? ORDER BY qudaoVip DESC, whetherSetTop DESC, id DESC limit ?,?",instance.mysqlParameter); instance.qudaoFirstPageJSONObject=new JSONObject(); instance.qudaoFirstPageJSONObject.put("results", instance.shareInt); instance.qudaoFirstPageJSONObject.put("rows", instance.shareJSONArray); instance.qudaoFirstPageJSONObject.put("status", "success"); instance.qudaoFirstPageJSONObject.put("msg", "查詢成功"); //渠道首頁數據 instance.mysqlParameter=new String[]{"最新資訊"}; instance.shareJSONArray=MySqlHepler2.getInstance() .executeQueryT("select count(*) as count from articleSheet where articleType=?",instance.mysqlParameter); instance.infoFirstPageJSONObject=instance.shareJSONArray.getJSONObject(0); instance.shareInt =instance.infoFirstPageJSONObject.getInt("count"); instance.mysqlParameter=new String[]{"最新資訊","0", "10"}; instance.shareJSONArray= MySqlHepler2.getInstance().executeQueryT("select * from articleSheet where articleType=? order by id desc limit ?,?",instance.mysqlParameter); instance.infoFirstPageJSONObject=new JSONObject(); instance.infoFirstPageJSONObject.put("results", instance.shareInt); instance.infoFirstPageJSONObject.put("rows", instance.shareJSONArray); instance.infoFirstPageJSONObject.put("status", "success"); instance.infoFirstPageJSONObject.put("msg", "查詢成功"); //渠道首頁數據 instance.mysqlParameter=new String[]{"常見問題"}; instance.shareJSONArray=MySqlHepler2.getInstance() .executeQueryT("select count(*) as count from articleSheet where articleType=?",instance.mysqlParameter); instance.shareJsonObject=instance.shareJSONArray.getJSONObject(0); instance.shareInt =instance.shareJsonObject.getInt("count"); instance.mysqlParameter=new String[]{"常見問題","0", "10"}; instance.shareJSONArray= MySqlHepler2.getInstance().executeQueryT("select * from articleSheet where articleType=? order by id desc limit ?,?",instance.mysqlParameter); instance.infoFirstPageJSONObject.put("results1", instance.shareInt); instance.infoFirstPageJSONObject.put("rows1", instance.shareJSONArray); //聯系方式 instance.mysqlParameter=new String[]{}; instance.shareJSONArray=MySqlHepler2.getInstance() .executeQueryT("select * from officialContactSheet",instance.mysqlParameter); instance.infoFirstPageJSONObject.put("results2", instance.shareJSONArray.length()); instance.infoFirstPageJSONObject.put("rows2", instance.shareJSONArray); instance.mysqlParameter=new String[]{}; instance.memberPriceSheetJSONArray=MySqlHepler2.getInstance() .executeQueryT("select * from memberPriceSheet",instance.mysqlParameter); //置頂失效過期 instance. finishTimes = System.currentTimeMillis(); instance.mysqlParameter=new String[] {String.valueOf(instance. finishTimes)}; MySqlHepler2.getInstance().executeUpdate("update publishProductShareInfoSheet set whetherSetTop=0 where setTopFinishLongTimes<? and whetherSetTop=1",instance.mysqlParameter); MySqlHepler2.getInstance().executeUpdate("update qudaoShareSheet set whetherSetTop=0 where setTopFinishLongTimes<? and whetherSetTop=1",instance.mysqlParameter); //用戶每間隔10分鍾掃描一次,會員到期的用戶 instance.mysqlParameter=new String[] {"none","none","none","0","資源用戶", String.valueOf(instance. finishTimes),"1"}; MySqlHepler2.getInstance().executeUpdate("update userSheet set resourceMember=?,resourceMemberBeginData=?,resourceMemberFinishData=?,resourceMemberFinishDataLongData=?,qudaoMemberType=? where resourceMemberFinishDataLongData<? and resourceMember=?",instance.mysqlParameter); instance.mysqlParameter=new String[] {"none","none","none","0","渠道用戶", String.valueOf(instance. finishTimes),"1"}; MySqlHepler2.getInstance().executeUpdate("update userSheet set qudaoMember=?,qudaoMemberBeginData=?,qudaoMemberFinishData=?,qudaoMemberFinishDataLongData=?,qudaoMemberType=? where qudaoMemberFinishDataLongData<? and qudaoMember=?",instance.mysqlParameter); String NowData=DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm"); //如果時間年月日不等於緩存字段中的年月日,說明到了第二天,執行隔天更新功能 instance.secondDayUpdateDataTemp=DateFormatUtils.format(new Date(), "yyyy-MM-dd"); if(!instance.secondDayUpdateDataTemp.equals(instance.secondDayUpdateData)) { AAAAYulebaoShareSingleton.getInstance().userRegisterIpDictionary=new JSONObject(); AAAAYulebaoShareSingleton.getInstance().userRegisterIpDictionary.put("192.168.0.1", "none"); for(int i=0;i<instance.memberPriceSheetJSONArray.length();i++) { instance.shareJsonObject=instance.memberPriceSheetJSONArray.getJSONObject(i); instance. limitPublishTimes=instance.shareJsonObject.getString("PublishEveryDay"); instance. limitLookTimes=instance.shareJsonObject.getString("lookTimesEveryDay"); instance. type=instance.shareJsonObject.getString("vipType"); instance.mysqlParameter=new String[]{ instance.limitLookTimes,instance.limitPublishTimes,instance.type}; if(instance.type.contains("資源")) { MySqlHepler2.getInstance().executeUpdateSingleton("update userSheet set todaySurplusResourceLookTimes=?,todaySurplusResourcePublishTimes=? where resourceMemberType=? ", instance.mysqlParameter); } if(instance.type.contains("渠道")) { MySqlHepler2.getInstance().executeUpdateSingleton("update userSheet set todaySurplusQudaoLookTimes=?,todaySurplusQudaoPublishTimes=? where qudaoMemberType=? ", instance.mysqlParameter); } } instance. mysqlParameter=new String[]{"第二天凌晨12:00執行",NowData}; MySqlHepler2.getInstance().executeUpdate("insert into tempDemoSheet(runmethord,runtimes) values (?,?)", instance. mysqlParameter); } else { instance. mysqlParameter=new String[]{"進入一次60秒執行一次",NowData}; MySqlHepler2.getInstance().executeUpdate("insert into tempDemoSheet(runmethord,runtimes) values (?,?)", instance. mysqlParameter); } } } } }
之前一直用timer+單例控制,在本機系統上間隔更新時間是准確的,但是上傳服務器偶爾會出現1分鍾跑兩次,比如我間隔時間改為1分鍾執行一次,偶爾會發現有兩次執行記錄,一直沒管它,改成當前的方式正常了。