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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

基于ssm框架的绩效管理系统

發(fā)布時間:2023/12/16 windows 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于ssm框架的绩效管理系统 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

技術(shù)選型:mybatis,spring,springMVC,quartz,oracle


功能模塊:績效匯報表的查詢、填寫、審批;郵件的發(fā)送;定時任務(wù)


工作流程:員工填寫完績效匯報表,提交后,系統(tǒng)發(fā)送郵件給主管,提醒主管及時審批,當主管審批完績效匯報表后,系統(tǒng)發(fā)送郵件給填寫該績效匯報表的員工,提醒員工查看審批結(jié)果,若審批通過,則無需處理;若審批不通過,則該員工需修改績效匯報表等待再次審批。發(fā)送失敗的郵件會被記錄,系統(tǒng)會每30min查詢是否有發(fā)送失敗的郵件并發(fā)送。

在系統(tǒng)開發(fā)時遇到的問題如下:


1.在spring-mybatis的整合xml文件中,若數(shù)據(jù)庫需要從properties動態(tài)取值

直接刪掉<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
注意:在沒有配置這一行時,必須配置一個以sqlSessionFactory命名的org.mybatis.spring.SqlSessionFactoryBean。

2.不支持org.springframework.jdbc.datasource.DriverManagerDataSource數(shù)據(jù)源嗎?

當修改為org.apache.commons.dbcp.BasicDataSource數(shù)據(jù)源時編譯成功。

反正我當時是報錯了,另外查了一下,這個數(shù)據(jù)源沒有用到連接池,推薦的也是下面這種呢

3.mybatis從數(shù)據(jù)庫查詢到數(shù)據(jù),超級智能的,我這里試過修改構(gòu)造器,刪除get、set方法,他依然能獨處數(shù)據(jù),究竟是采用的什么詭異的方法?

根據(jù)測試結(jié)果寫入采用的是構(gòu)造器的方式。


4.Oracle數(shù)據(jù)庫自增序列:

create sequence table_autoincminvalue 1maxvalue 9999999999start with 1increment by 1nocycle 觸發(fā)器: create or replace trigger insert_table_autoincbefore insert on PerformanceTablefor each rowbeginselect table_autoinc.nextval into :new.PerformanceId from dual;end;

實現(xiàn)數(shù)據(jù)表中ID的自增,即使你輸入了ID值,也會被序列值取代。


5.當jsp有頁面請求時,例如src="${pageContext.request.contextPath }/js/checkCode.js"。

這時,我們需在springmvc配置文件聲明默認的servlet。

<mvc:default-servlet-handler/>

否則,他會去controller中尋找對應(yīng)requestmapping,然后報錯。


6、textaera的換行問題

問題出在EL表達式中,在js中使用EL表達式會不能正確獲得參數(shù),導(dǎo)致錯誤顯示內(nèi)容。

采用隱藏域的方式獲取后臺傳來的值,替代EL表達式。

經(jīng)過測試,textaera里面的換行似乎也是使用的\n。


7.在頁面中使用EL表達式:

若在jsp頁面中,可以直接使用,但是要加引號,因為js的數(shù)據(jù)類型和EL表達式的數(shù)據(jù)類型不匹配,加上引號則會將EL表達式的內(nèi)容轉(zhuǎn)換成String類型,所以當EL表達式的值為null,false,true這些關(guān)鍵字時,其也是以String類型存在的。

若在js文件中使用,目前還沒有找到很好的辦法,但我的解決思路是在jsp頁面獲取其值,然后存入input的hidden域中,在js文件中就可以直接調(diào)用。


8.EL表達式獲取不到值時若為字符串則為空串,而<%=%>獲取不到值時,若為字符串則為null。


9.郵件發(fā)送

郵件的發(fā)送我最開始用的126的服務(wù)器,查詢錯誤信息,發(fā)現(xiàn)服務(wù)器一直將我發(fā)送的郵件當垃圾郵件處理而發(fā)送失敗。

當我使用公司的exchange服務(wù)器的時候,發(fā)送郵件才成功,但是在一段時間內(nèi)發(fā)送郵件有數(shù)量限制。

我的發(fā)送郵件的方法是一個靜態(tài)方法,當我用quartz來執(zhí)行這個靜態(tài)方法的時候,總是導(dǎo)致我的tomcat重啟,問題很詭異,還沒有找到原因。

我把發(fā)送郵件的方法修改為普通方法之后問題解決。

<!-- 郵件發(fā)送器 --><bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"><property name="host" value="${mail.host}" /><property name="username" value="${mail.username}" /><property name="password" value="${mail.password}" /><property name="defaultEncoding" value="UTF-8"></property><property name="javaMailProperties"><props><prop key="mail.smtp.auth">${mail.smtp.auth}</prop><prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop><prop key="mail.smtp.port">${mail.smtp.port}</prop></props></property></bean>

@Component public class MailSend {@Autowiredprivate JavaMailSender mailSender;public void send(Mail mail) {JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();MimeMessage mailMsg = senderImpl.createMimeMessage();try {MimeMessageHelper messageHelper = new MimeMessageHelper(mailMsg, true, "utf-8");// 接受者messageHelper.setTo(mail.getRecipient());// 發(fā)送者messageHelper.setFrom("huangjiangbo@jlpay.com");// 主題messageHelper.setSubject(mail.getSubject());// 郵件內(nèi)容,注意加參數(shù)true,表示啟用html格式messageHelper.setText(mail.getContent(), true);mailSender.send(mailMsg);} catch (MessagingException e) {e.printStackTrace();}}}

10.線程池相關(guān)。

因為涉及到發(fā)送郵件功能,該功能可能非常耗時,我決定為其開辟線程執(zhí)行該功能。

<!-- 異步線程池 --><bean id="threadPoolTaskExecutor"class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"><!-- 核心線程數(shù) --><property name="corePoolSize" value="${corePoolSize}" /><!-- 最大線程數(shù) --><property name="maxPoolSize" value="${maxPoolSize}" /><!-- 隊列最大長度 >=mainExecutor.maxSize --><property name="queueCapacity" value="${queueCapacity}" /><!-- 線程池維護線程所允許的空閑時間 --><property name="keepAliveSeconds" value="${keepAliveSeconds}" /><property name="rejectedExecutionHandler"><!-- AbortPolicy:直接拋出java.util.concurrent.RejectedExecutionException異常 --><!-- CallerRunsPolicy:主線程直接執(zhí)行該任務(wù),執(zhí)行完之后嘗試添加下一個任務(wù)到線程池中,可以有效降低向線程池內(nèi)添加任務(wù)的速度 --><!-- DiscardOldestPolicy:拋棄舊的任務(wù)、暫不支持;會導(dǎo)致被丟棄的任務(wù)無法再次被執(zhí)行 --><!-- DiscardPolicy:拋棄當前任務(wù)、暫不支持;會導(dǎo)致被丟棄的任務(wù)無法再次被執(zhí)行 --><bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" /></property></bean>

mailThread繼承了Thread類,在run方法中發(fā)送郵件,發(fā)送郵件相關(guān)的類我都是通過構(gòu)造器傳入的。

taskExecutor是注入的上面寫的bean。

lfcs是我繼承ListenableFutureCallback<Boolean>接口后重寫了onsuccess和onFailure方法,很顯然,你可以把你想要處理線程正常完成或者拋出異常的內(nèi)容寫在里面。

所以最關(guān)鍵的一行代碼是futureTask.addCallback(lfcs)

@SuppressWarnings("unchecked")public void sendMail(Mail mail) {Thread mailThread = new MailThread(mail, mailSend);lfcs.setMail(mail);ListenableFutureTask<Boolean> futureTask = (ListenableFutureTask<Boolean>) taskExecutor.submitListenable(mailThread);futureTask.addCallback(lfcs);}

11、filter如果要引用bean的情況。攔截器中是可以通過@autowire來獲取的。

作者:容偉新
鏈接:https://www.zhihu.com/question/22977026/answer/23317656
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

眾所周知,web應(yīng)用啟動的順序是:listener->filter->servlet,而因為項目應(yīng)用了spring mvc,所以我們會有兩個配置文件(applixationContext.xml和springMVC-sevlet.xml),我們在配置spring時會用到spring的listener,它會讀取application.xml里的配置對spring context進行初始化;而springMVC-servlet.xml則是在spring mvc的dispathServlet啟動的時候讀取進行配置。而如果項目里用到了注解,則需要在springMVC-servlet.xml中加上“”。ok,經(jīng)過上面的鋪墊后,進入重點。問題就是項目啟動時,先初始化listener,因此配置在applicationContext.xml里的bean會被初始化和注入;然后再來就filter的初始化,再接著才到我們的dispathServlet的初始化,因此,當我們需要在filter里注入一個注解的bean時,就會注入失敗,因為filter初始化時,注解的bean還沒初始化,沒法注入。所以,如果想要在filter里注入注解bean的話,就要在applicationContext.xml里配置context,也就是上面說的那句配置。在這里配置時需要注意的是,需要把tx和aop的配置放在最下面,否則也會導(dǎo)致spring的context初始化失敗。把配置弄好之后,我們就在filter的init方法里,通過獲取webApplicationContext的getBean方法對需要的bean進行注入。以上是個人折騰了很久后的總結(jié),希望能幫助到同樣遇到這問題的小伙伴們……
12、開發(fā)環(huán)境和服務(wù)器環(huán)境使用一樣的JDK,不然會出現(xiàn)任務(wù)的class not found。



總結(jié)

以上是生活随笔為你收集整理的基于ssm框架的绩效管理系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。