日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【struts2+hibernate+spring项目实战】Spring计时器任务 Spring整合JavaMail(邮件发送)(ssh)

發布時間:2025/3/20 java 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【struts2+hibernate+spring项目实战】Spring计时器任务 Spring整合JavaMail(邮件发送)(ssh) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、常用數據頻度維護

對于系統使用度較高的數據,客戶在查看時希望這些數據最好先出現,此時需要為其添加排序規則。在進行排序時,使用次數成為排序的依據。因此需要設置一個字段用來描述某種數據的使用次數,也就是所謂的使用頻度。
本系統中,商品數據是整體數據流的核心數據,為商品數據添加頻度字段。

該字段的值默認為0,每使用一次,將其值自增一。但是如果每次使用都修改該表的對應字段,操作量無疑是巨大的,并且還牽扯到數據庫操作的隔離級問題,需要防止并發帶來的錯誤操作。
系統中經常會出現此類任務,即需要修改某些數據的值,但是此數據并不需要具有很強的即時性。只需要在某一個特定時刻,將該值修改即可。
基于上述分析,需要一種機制保障,在特定時間點,將對應商品的使用次數修改為當前已使用的總次數即可。最終數據排序時,以該字段作為排序依據即可。
上述問題需要完成兩個任務即可

  • 規定時間內循環執行某任務
  • 執行特殊的SQL語句,完成修改使用次數字段的任務

二、Spring定時作業調度

Spring提供了定時器任務,用于在規定時間執行對應的任務。

1.定義定時作業任務Bean,及其作業任務對應的操作

/** * 設備一數據插入(小時)*/ public void insertHourService1(){realmEbi = (RealmEbi) ApplicationContextUtil.getBean("realmEbi");realmEbi.insertHour(RealmApplianceModel.sendData3); }

2.將其配置為Spring管理的Bean

<!-- 定義一個定時bean --> <bean id="timerTask" class="org.sihai.soilmoni.soilrealm.web.SoilRealmAction"> </bean>

3.定義作業任務

<!-- 設備二數據定時插入(天) --> <bean id="jobTask4" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="timerTask"/><property name="targetMethod" value="insertDayService2"/> </bean>

4.定義作業任務的執行時間周期

<bean id="doTime4" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail" ref="jobTask4"/><property name="cronExpression" value="0 59 23 * * ?"/> </bean>

5.設置該任務加入定時任務

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers"><list><ref bean="doTime"/><ref bean="doTime2"/><ref bean="doTime3"/><ref bean="doTime4"/></list></property> </bean>

6.修改執行的時間周期值,參看:資源/定時調度Quartz/Cron表達式.txt

設置執行周期為每10秒一次 0/10 * * * * ? 每10秒一次 0/10 * * ? * * 每10秒一次

7.源碼

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers"><list><ref bean="doTime"/><ref bean="doTime2"/><ref bean="doTime3"/><ref bean="doTime4"/></list></property></bean><!-- 作業任務 --><bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail" ref="jobTask"/><property name="cronExpression" value="0 59 23 * * ?"/></bean><bean id="doTime2" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail" ref="jobTask2"/><property name="cronExpression" value="0 59 23 * * ?"/></bean><bean id="doTime3" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail" ref="jobTask3"/><property name="cronExpression" value="0 59 23 * * ?"/></bean><bean id="doTime4" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail" ref="jobTask4"/><property name="cronExpression" value="0 59 23 * * ?"/></bean><!-- 定義作業任務 --><!-- 設備一數據定時插入(小時) --><bean id="jobTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="timerTask"/><property name="targetMethod" value="insertHourService1"/></bean><!-- 設備二數據定時插入(小時) --><bean id="jobTask2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="timerTask"/><property name="targetMethod" value="insertHourService2"/></bean><!-- 設備一數據定時插入(天) --><bean id="jobTask3" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="timerTask"/><property name="targetMethod" value="insertDayService1"/></bean><!-- 設備二數據定時插入(天) --><bean id="jobTask4" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="timerTask"/><property name="targetMethod" value="insertDayService2"/></bean><!-- 定義一個定時bean --><bean id="timerTask" class="org.sihai.soilmoni.soilrealm.web.SoilRealmAction"></bean></beans>

三、常用數據頻度維護

使用Spring數據頻度調度維護,配置需改數據操作,完成商品使用量頻度維護

1.定義維護商品使用頻度的SQL語句,執行并驗證執行效果

update tbl_goods g set g.useNum = (select count(odm.uuid) from tbl_detail_order odm where odm.goodsUuid = g.uuid)

2.將上述任務轉化為定時任務方法

注入對應的數據層Bean,并開啟事務

3.設置該任務的執行周期

四、庫存預警功能

庫存預警功能是對庫存商品數量進行報警的一種機制。當庫存商品數量高于或低于指定的預警數量時,產生報警信息。
報警信息可以是如下方案之一

  • 發郵件
  • 發短信
  • 給手機發送消息
  • 發出警報消息(ERP系統內發送給主管:主管再將該任務派發到人員:實現方式ServletContext范圍內的數據共享,創建集合(必須是多線程安全的)頁面設計定時器定時獲取該集合數據,每隔一段時間發送AJAX請求,獲取預警信息
    報警操作必須時刻監控庫存商品的數量。如果到達報警臨界值,進行指定方式的信息報警。此處使用Email形式進行報警。

1.設置報警定時器任務,當庫存商品總數量低于最低值或高于最高值時,發送Email到倉庫管理員,進行預警報警。

2.設置庫存預警定時作業調度任務

3.測試定時作業是否成功
4.獲取引發預警信息的數據
對庫存明細數據進行分組統計求和,如果數量超出對應商品的庫存預警值,將該商品加入庫存預警信息

select gm.uuid,gm.goodsName,sum(sdm.now)>=gm.maxNum ,sum(sdm.now)<=gm.minNum from tbl_detail_store sdm,tbl_goods gm where sdm.goodsUuid = gm.uuid group by sdm.goodsUuid

5.獲取數據后判斷是否需要發送庫存預計信息

五、Spring整合JavaMail

Spring提供對JavaMail的整合技術,配置JavaMail發送器為Spring管理的Bean,實現Spring管理資源的機制。
1.配置Spring管理的JavaMail發送器對象

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><description>JavaMail的配置文件</description><!-- 加載mail.properties配置文件 --><context:property-placeholder location="classpath:mail.properties"/><!-- 簡單消息對象創建 --><bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage"><property name="from" value="${mail.from}"></property></bean><!-- 2.創建發送器 --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"><property name="host" value="${mail.host}"></property><property name="username" value="${mail.username}"></property><property name="password" value="${mail.password}"></property><property name="defaultEncoding" value="UTF-8"></property><property name="javaMailProperties"><props><prop key="mail.smtp.auth">true</prop><prop key="mail.debug">true</prop><prop key="mail.smtp.timeout">0</prop></props></property></bean> </beans>

2.設置發送郵件相關內容

//spring整合javaMail需要注入:private SimpleMailMessage mailMessage;private JavaMailSender mailSender;public void setMailMessage(SimpleMailMessage mailMessage) {this.mailMessage = mailMessage;}public void setMailSender(JavaMailSender mailSender) {this.mailSender = mailSender;} public void saveOrUpdate(final User entity) { if(UtilFuns.isEmpty(entity.getId())){//判斷id是否有值//說明id沒有值,說明保存 entity.setState(1); //1代表可用String id = UUID.randomUUID().toString();entity.setId(id);entity.getUserinfo().setId(id);//設置初始密碼 需要將默認的密碼加密后保存到數據庫entity.setPassword(Encrypt.md5(SysConstant.DEFAULT_PASS, entity.getUserName())); //final就是延長對象的生命周期,不然entity只能在saveOrUpdate中使用,使用完成后方法彈棧,而run方法內就無法再使用之前定義好的entity。 //使用spring與javaMail實現新員工入職時郵件的發送 //使用線程并try-catch的目的就是如果郵件發送失敗,也不影響信息保存到數據庫。郵件發送成為了一個獨立的過程。Thread th = new Thread(new Runnable(){public void run(){try {mailMessage.setTo(entity.getUserinfo().getEmail());mailMessage.setSubject("新員工入職信息");mailMessage.setText("歡迎"+entity.getUserinfo().getName()+"加入廊坊思創志遠科技有限公司,您在公司的賬號:"+entity.getUserName()+",密碼:"+SysConstant.DEFAULT_PASS);mailSender.send(mailMessage);} catch (MailException e) {e.printStackTrace();}}});th.start();}baseDao.saveOrUpdate(entity);}

3.設置發送郵件的消息內容

4.發送郵件

如果想獲取更多源碼或者視頻教程,歡迎關注我的微信公眾號 好好學java,在公眾號里,回復:java基礎、html5、javaEE基礎、struts2、spring、redis、luncene、oracle等,將可獲得以上的優質視頻教程及源碼。

總結

以上是生活随笔為你收集整理的【struts2+hibernate+spring项目实战】Spring计时器任务 Spring整合JavaMail(邮件发送)(ssh)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。