背景:
為保證預發環境的真實性,預發與生產環境往往共享數據庫,在定時任務列表中,預發與生產環境都會從任務列表中獲取定時任務,然后執行,這會導致定時任務會執行重復。
解決方法:
在job中增加一個環境變量字段,如test,stg,prod等,當創建任務的時候獲取執行創建任務服務器的profile,根據profile插入到jod的上述字段中。定時任務執行時判斷任務是否符合執行機器的profile,符合則執行,不符合則不執行。
具體可執行操作:
1.在tomcat或者啟動腳本中加入vm參數,例如
-Dspring.profiles.active=stg
2.代碼獲取profile的辦法示例:
@Autowired
Environment env;
簡單的controller獲取如下:
@RequestMapping(value="/getProfiles") @ResponseBody public String getProfiles() throws ParseException { StringBuffer sb=new StringBuffer(); String[] profiles= env.getActiveProfiles(); for(String profile:profiles){ sb.append(profile).append("\r\n"); } return sb.toString(); }
