java 当数据库数据发生变化时自动发送邮件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 当数据库数据发生变化时自动发送邮件相关的知识,希望对你有一定的参考价值。

我在做一个项目,要求是:当商品缺货时,系统自动向客户邮件发送邮件。在java中,可以使用什么方法,随时检查数据库中某个商品缺货时,调用过java中的方法发送邮件。(注:如何发送邮件我知道)。希望给点完整的代码
客户在设置信息里设置了缺货通知,当缺货时只通知一次即可,想用触发器处理

1. java 的Timer类可以实现你的机制
2. spring的定时task也可以实现你的机制,不过也是间接调用java.util.Timer什么的。
3. 某个商品缺货,应该可以select语句获取改标记位,如果是,就定时发送。
4. 没有代码

追问

最主要的是我之前没有写过定时任务,可否给个demo

追答网页搜索一大把,几秒钟就搞定了

参考技术A spring配置切面,在执行出货的service方法之前或之前做拦截,对数据库中的货品数量判断追问

可否给个小demo

追答

http://blog.csdn.net/rongyongfeikai2/article/details/6755774

追问

开始咨询了我们设计,简单说了哈,在service里写一段代码,使用触发器处理,具体说的也不清楚,请高手详细给我说一下改怎么做?

追答

最好不要用定时轮询数据库的设计,等数据多了效率会是很大问题,用切面可以实时触发。spring aop自己查询一下吧,会对你有很大帮助。

参考技术B 搜索 spring quartz ,配置成功后,执行过程的代码与一般方法没有区别追问

开始咨询了我们设计,简单说了哈,在service里写一段代码,使用触发器处理。关于这种方式,请问高手之前用过没。具体说的也不清楚,详细给我说一下改怎么做?

追答

quartz 就是采用触发器机制,简单的说就是设置一个触发器(Cron表达式),触发后会自动调用你的service层方法,所以只要先了解spring quartz 的配置,实现功能是很简单的

本回答被提问者采纳
参考技术C 写个定时程序,隔几秒查一下数据库,缺货时发邮件。追问

定时程序的小demo方便给一个吗

追答

百度“java定时任务”

当 sql server 数据库中的数据发生变化时,从一个 android 应用程序向另一个应用程序发送推送通知

【中文标题】当 sql server 数据库中的数据发生变化时,从一个 android 应用程序向另一个应用程序发送推送通知【英文标题】:send push notification from one android app to another when data in sql server database changes 【发布时间】:2021-08-22 11:33:53 【问题描述】:

我试图了解当用户向 sql server 数据库添加记录或删除记录时,设备上的 android 应用程序如何向另一台设备上的另一个 android 应用程序发送通知。我开始研究并发现我必须使用 FCM。我应用了本教程https://docs.microsoft.com/en-us/xamarin/android/data-cloud/google-messaging/remote-notifications-with-fcm?tabs=windows 并且它有效,但它并没有帮助我理解 android 应用程序如何很好地发送通知。我试图从 java 中应用这样的代码https://blog.heyday.xyz/send-device-to-device-push-notifications-without-server-side-code-238611c143,我试图将其转换为 c#,但它对我不起作用。我实际上不知道如何将它完全写成 c#。我也试过这个:Xamarin android FCM Notification Client to client(phone to phone) 但徒劳无功。我搜索了很多,但我不知道为什么感觉很复杂。如果有人可以帮我找到一个教程来做到这一点。提前致谢。

【问题讨论】:

据我所知,FireBase Clound Message,只是显示您从 FireBase 控制台发送的远程通知,不要实现与不同设备上的两个 Android 应用程序通信的功能。 我真的不知道,你知道怎么做吗? 也许你可以使用Azure Notification hub to send notification,并使用web api 来检查sql server 数据库的变化。 【参考方案1】:

要在 Xamarin.android 中将通知从一台设备发送到另一台设备,有几种方法:

    向数据库添加新行时使用 Firebase 云消息传递 例子: //添加新行的过程 //发布在 FCM 上 注意:接收设备必须在 firebase 云消息中注册设备令牌 更多细节: https://docs.microsoft.com/en-us/xamarin/android/data-cloud/google-messaging/firebase-cloud-messaging

    在接收设备的后台使用任务工作并检查数据库中的行数 示例:

    Task.Run(()=> //检查行数的代码 );

如果改变调用这个方法:

   public void SendNotification(int periority_notification, return_user_info User_info, Context context)
        
            /*here intent to open layout when click on notification*/
            Intent inten = new Intent(context, typeof(MainActivity));
            const int pendingIntentId = 0;

            PendingIntent pendingIntent =

                PendingIntent.GetActivity(context, pendingIntentId, inten, PendingIntentFlags.OneShot);
            var title = User_info.User_Email;
        var message = User_info.User_Name.Trim() + "   Reserved Request";
            using (var notificationManager = NotificationManager.FromContext(context))
            
                Notification notification;
                if (Android.OS.Build.VERSION.SdkInt < Android.OS.BuildVersionCodes.O)
                
                    notification = new Notification.Builder(context)
                                                         .SetContentIntent(pendingIntent)
                                                         .SetContentTitle(title)
                                                         .SetContentText(message)
                                                         .SetAutoCancel(true)
                                                         .SetPriority(1)
                                                          .SetSmallIcon(Resource.Drawable.carparts)
                                                         .SetDefaults(NotificationDefaults.All)
                                                         .Build();

                
                else
                
                    var myUrgentChannel = context.PackageName;
                    const string channelName = "SushiHangover Urgent";

                    NotificationChannel channel;
                    channel = notificationManager.GetNotificationChannel(myUrgentChannel);
                    if (channel == null)
                    
                        channel = new NotificationChannel(myUrgentChannel, channelName, NotificationImportance.High);
                        channel.EnableVibration(true);
                        channel.EnableLights(true);
                        channel.LockscreenVisibility = NotificationVisibility.Public;
                        notificationManager.CreateNotificationChannel(channel);
                    
                    channel?.Dispose();

                    notification = new Notification.Builder(context)
                                                         .SetContentIntent(pendingIntent)
                                                         .SetChannelId(myUrgentChannel)
                                                         .SetContentTitle(title)
                                                         .SetContentText(message)
                                                         .SetAutoCancel(true)
                                                         .SetSmallIcon(Resource.Drawable.carparts)
                                                         .Build();
                
                notificationManager.Notify(periority_notification, notification);
                notification.Dispose();
            
        

【讨论】:

以上是关于java 当数据库数据发生变化时自动发送邮件的主要内容,如果未能解决你的问题,请参考以下文章

postgresql - java - 当数据库中发生某些事情时唤醒应用程序

当 sql server 数据库中的数据发生变化时,从一个 android 应用程序向另一个应用程序发送推送通知

当数据库发生变化时,你如何管理你的 ORM 层?

使用CFMail发送多封电子邮件时,电子邮件的顺序会发生变化

python发送邮件

数据变化时自动刷新jsp页面