0
我在Spring MVC 4項目中使用亞馬遜推送通知。我已經使用CronTrigger每天早上8點向Android應用發送推送通知。我還使用了Timezone和CronTrigger,以便用戶根據各自的時區獲取通知。CronTrigger在指定的時間沒有觸發,而是在錯誤的時間發送多個推送通知
這裏是我的WebConfig.java:
@Configuration
@EnableScheduling
@EnableWebMvc
@ComponentScan(basePackages="com.project")
public class WebConfig implements SchedulingConfigurer
{
protected static final Logger slf4jLogger = Logger.getLogger(WebConfig.class.getName());
private static final String cronExpression = "0 8 * * * ?";
/*@Bean
public MobileNotifSchedulerBean schedulerbean()
{
return new MobileNotifSchedulerBean();
}*/
@Bean
public InternalResourceViewResolver getInternalResourceViewResolver()
{
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
resolver.setSuffix(".html");
resolver.setSuffix(".htm");
return resolver;
}
@Bean
CronTrigger cronTrigger()
{
//The code in FetchUserTimeZones.java fetches all the user timezones which are stored in DynamoDb. Eg timeZone = "Asia/Calcutta";
String timeZone = null;
HashSet<String> userTimeZonesfromDB = FetchUserTimeZones.fetchUserTimeZone();
for (String s : userTimeZonesfromDB)
{
timeZone = s;
slf4jLogger.info(s);
}
return new CronTrigger(cronExpression, TimeZone.getTimeZone(timeZone));
}
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar)
{
taskRegistrar.addCronTask(new CronTask(new MobileNotifSchedulerBean(), cronTrigger()));
}
@Bean(destroyMethod="shutdown")
public Executor taskExecutor()
{
return Executors.newScheduledThreadPool(1);
}
}
這裏是我的MobileNotifSchedulerBean: 此代碼DynamoDb獲取隨機的問題的幫助下把他們的推送通知每個GCM registrationID CronTrigger設置爲時間(上午8點)。我已使用snsmobilepush.zip從http://docs.aws.amazon.com/sns/latest/dg/mobile-push-gcm.html。
@EnableScheduling
public class MobileNotifSchedulerBean implements Runnable
{
protected static final Logger slf4jLogger = Logger.getLogger(MobileNotifSchedulerBean.class.getName());
public MobileNotifSchedulerBean()
{
run();
}
public void sendQuestionNotif()
{
try
{
HashSet<String> reg_ids = FetchRegistrationIDs.fetchItems();
for (String s : reg_ids)
{
String REGISTRATION_IDs = s;
slf4jLogger.info(s);
MobileSNSPushNotification.sendNotification(REGISTRATION_IDs);
}
}
catch (IOException e)
{
//e.printStackTrace();
slf4jLogger.error(e);
slf4jLogger.error(e.getMessage());
slf4jLogger.error(e.getStackTrace());
}
}
@Override
public void run()
{
sendQuestionNotif();
}
}
請幫我我哪裏出錯了。唯一的問題是推送通知發生在錯誤的時間,並且還有多個通知,而不是每個用戶每天(上午8點)只推送一個通知。 TIA。
更新:在Cron表達式中有一個更正。我糾正了它。
private static final String cronExpression = "0 0 8 * * ?"; // For everyday 8 am.
但還是問題並沒有固定
我能留住ScheduledTaskRegistrar或使用的TaskScheduler創建一個單獨的時間表? – Chandz
我用戶_TaskScheduler_。我得到這個錯誤,_No [org.springframework.scheduling.TaskScheduler]類型的合格bean被定義了_你能幫我嗎? – Chandz