收藏本站
我的資料
   
查看手機網站
OA系統選型網
采購軟件系統 選型  免費咨詢平臺
按系統領域分
  • OA協同系統 ??移動應用
    OA協同系統
    無紙化系統
    移動OA
    協同管理
    移動應用
    移動考勤
    移動報銷
    移動營銷
  • HR人力資源 ??合同管理
    HR人力資源
    人事管理
    薪酬管理
    考勤管理
    招聘培訓管理
    合同管理
    合同管理
  • CRM客戶管理 ??項目管理
    CRM客戶管理
    客戶管理
    銷售管理
    在線CRM
    項目管理
    項目管理
  • ERP系統 ??財務系統
    ERP系統
    生產制造ERP
    商貿ERP
    云ERP
    通用ERP
    財務系統
    資金管理
    財務管理
    報表管理
    財稅一體化
  • 文檔管理???流程管理
    文檔管理
    文檔查詢
    文檔存儲管理
    文檔安全管理
    流程管理
    流程管理
  • 預算管理???資產管理
    預算管理
    費用預算
    全面預算
    資產管理
    固定資產
    資產使用管理
  • 進銷存管理???生產制造
    進銷存管理
    庫存管理
    采購管理
    存貨核算
    在線進銷存
    生產制造
    設備管理
    生產管理
    產能管理
    生產計劃
  • 系統集成 ??定制開發
    系統集成
    安防監控
    遠程管理
    定制開發
  • 建站推廣???訂貨系統??其它
    建站推廣
    網站建設
    SEO網絡推廣
    小程序
    訂貨系統
    分銷商城
    新零售
    微信三級分銷
    其他
    硬件設備
    其它

Ecology9.0泛微系統接口指南——數據源和計劃任務OA接口

 二維碼 155
發表時間:2020-05-18 11:28作者:oa系統網址:http://www.456371.tw



一、數據源

ecology提供了許多系統擴展接口,開發人員可以通過這些接口操作不同的數據源。例如把ecology的數據同步到其他的系統中去,或把其他系統中的數據同步到ecology中來,本質上就是在兩個數據源之間交換數據。定義數據源的方法很簡單,只需要在ecology安裝目錄/WEB-INF/service/datasource.xml中聲明一下就可以了。

<service-point id="local" interface="weaver.interfaces.datasource.DataSource">

        <invoke-factory>

            <construct class="weaver.interfaces.datasource.BaseDataSource">

                <set property="type" value="oracle"/>

                <set property="host" value="192.168.0.204"/>

                <set property="port" value="1521"/>

                <set property="dbname" value="weaver1"/>

                <set property="user" value="dcwork1"/>

                <set property="password" value="dcwork1"/>

<set property="minconn" value="5"/>

<set property="maxconn" value="10"/>

            </construct>

        </invoke-factory>

</service-point>

上面的聲明定義了一個oracle數據源,我們可以在datasource.xml文件中定義多個數據源,只需按照上面的格式添加一段新的聲明就可以了,僅僅需要改動紅色標出來的部分。例如添加一個sql server 數據源:msds

<service-point id="msds" interface="weaver.interfaces.datasource.DataSource">

        <invoke-factory>

            <construct class="weaver.interfaces.datasource.BaseDataSource">

                <set property="type" value="sqlserver"/>

                <set property="host" value="192.168.0.38"/>

                <set property="port" value="1433"/>

                <set property="dbname" value="ecology"/>

                <set property="user" value="sa"/>

                <set property="password" value="ecology"/>

<set property="minconn" value="5"/>

<set property="maxconn" value="10"/>

            </construct>

        </invoke-factory>

</service-point>

說明:

type: 數據庫類型。有效值為oracle、sqlserver、db2、mysql

host: 數據庫主機名或ip

dbname: 數據庫名

user:數據庫賬號

password: 數據庫密碼

minconn: 連接池最小連接數

maxconn: 連接池最大連接數



二、計劃任務接口

作用:

客戶開發人員可以利用計劃任務接口定時執行一段自己定義的操作,比如在兩個數據源之間交換數據。


Ecology提供兩種計劃任務接口:

1
IntervalJob接口,此接口每隔一段時間執行一次(自己定義間隔時間)

2
CronJob接口,此接口在指定的時間點執行(自己定義時間點)


定義計劃任務的方法是在ecology安裝目錄/WEB-INF/service/schedule.xml中聲明:

<service-point id="job1" interface="weaver.interfaces.schedule.IntervalJob">

        <invoke-factory>

            <construct class="weaver.interfaces.schedule.BaseIntervalJob">

   <set-service property="ds" service-id="local"/>

   <set property="second" value="60"/>

            </construct>

        </invoke-factory>

</service-point>

上面的聲明定義了一個名為job1的IntervalJob,該接口中的方法execute()將會每60秒執行一次。同時把前面定義的local數據源注入到了接口中,這樣的話就可以在execute()中讀寫local數據源。我們也可以注入兩個數據源到接口中,這樣就可以在兩個數據源之間交換數據:

<service-point id="job2" interface="weaver.interfaces.schedule.IntervalJob">

        <invoke-factory>

            <construct class="weaver.interfaces.schedule.BaseIntervalJob">

   <set-service property="ds" service-id="local"/>

<set-service property="ds1" service-id="msds"/>

   <set property="second" value="60"/>

            </construct>

        </invoke-factory>

</service-point>


聲明一個CronJob的方法和IntervalJob類似,在ecology安裝目錄/WEB-INF/service/schedule.xml中聲明:

<service-point id="job3" interface="weaver.interfaces.schedule.CronJob">

        <invoke-factory>

            <construct class="weaver.interfaces.schedule.BaseCronJob">

   <set-service property="ds" service-id="local"/>

<set-service property="ds1" service-id="msds"/>

   <set property="cronExpr" value="0 44 12 ? * MON-FRI"/>

            </construct>

        </invoke-factory>

</service-point>

上面的聲明定義了一個周一到周五12:44執行的計劃任務。什么時候執行計劃任務由cronExpr表達式決定。

一個cron表達式有至少6個有空格分隔的時間元素,按順序依次為:

秒(0~59)

分鐘(0~59)

小時(0~23)

天(月)(0~31,但是你需要考慮你月的天數)

月(0~11)

天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)


0 0 10,14,16 * * ? 每天上午10點,下午2點,4點

0 0/30 9-17 * * ?   朝九晚五工作時間內每半小時

0 0 12 ? * WED 表示每個星期三中午12點

"0 0 12 * * ?" 每天中午12點觸發

"0 15 10 ? * *" 每天上午10:15觸發

"0 15 10 * * ?" 每天上午10:15觸發

"0 * 14 * * ?" 在每天下午2點到下午2:59期間的每1分鐘觸發

"0 0/5 14 * * ?" 在每天下午2點到下午2:55期間的每5分鐘觸發

"0 0/5 14,18 * * " 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發

"0 0-5 14 * * ?" 在每天下午2點到下午2:05期間的每1分鐘觸發

"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44觸發

"0 15 10 ? * MON-FRI" 周一至周五的上午10:15觸發

"0 15 10 15 * ?" 每月15日上午10:15觸發

"0 15 10 L * ?" 每月最后一日的上午10:15觸發

"0 15 10 ? * 6L" 每月的最后一個星期五上午10:15觸發

"0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發


有些子表達式能包含一些范圍或列表

例如:子表達式(天(星期))可以為 “MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT”

“*”字符代表所有可能的值

因此,“*”在子表達式(月)里表示每個月的含義,“*”在子表達式(天(星期))表示星期的每一天

“/”字符用來指定數值的增量

例如:在子表達式(分鐘)里的“0/15”表示從第0分鐘開始,每15分鐘

         在子表達式(分鐘)里的“3/20”表示從第3分鐘開始,每20分鐘(它和“3,23,43”)的含義一樣



“?”字符僅被用于天(月)和天(星期)兩個子表達式,表示不指定值

當2個子表達式其中之一被指定了值以后,為了避免沖突,需要將另一個子表達式的值設為“?”

注意,上文中的weaver.interfaces.schedule.BaseIntervalJobweaver.interfaces.schedule.BaseIntervalJob是ecology提供的默認接口實現,它們的execute()是空的,不做任何操作??蛻糸_發人員如果要使用計劃任務接口的話,必需繼承weaver.interfaces.schedule.BaseIntervalJobweaver.interfaces.schedule.BaseIntervalJob,用自己的業務邏輯覆蓋它們的execute().

舉個簡單的例子,我需要ecology系統每隔一小時統計一下系統人數并輸出到控制臺,步驟如下

1
編寫自己的計劃任務實現

import weaver.interfaces.schedule.BaseIntervalJob;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

/**

* IntervalJob示范代碼,集成BaseIntervalJob,用自己的業務邏輯覆蓋了execute()方法

*/

public class MyIntervalJob extends BaseIntervalJob {

    public void execute() {

        //從數據源中獲取連接

        Connection conn = getDs().getConnection();

        try {

            //通過jdbc獲取人數

            PreparedStatement s = conn.prepareStatement("select count(*) as amount from hrmresource");

            ResultSet rs = s.executeQuery();

            rs.next();

            String amount = rs.getString("amount");

            //輸出到控制臺

            System.out.println("人數:" + amount);

            //關閉記錄集

            rs.close();

            //關閉statement

            s.close();

        } catch (Exception e) {

            getLog().error(e);

        } finally {

            try {

                //關閉連接

                conn.close();

            } catch (Exception e) {

                getLog().error(e);

            }

        }

    }

}

3
在schedule.xml中聲明

<service-point id="job3" interface="weaver.interfaces.schedule.IntervalJob">

        <invoke-factory>

            <construct class="MyIntervalJob">

   <set-service property="ds" service-id="local"/>

   <set property="second" value="3600"/>

            </construct>

        </invoke-factory>

</service-point>

可以用類似的方法實現自己的cronJob,本文不再贅述。

廣泛業務.png


入駐機構:    <商家如何入駐>
本網部分內容轉載自其他媒體,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性。不承擔此類作品侵權行為的直接責任及連帶責任。
系統軟件選型
價格高、不適用,要它有何價值?
        詳情咨詢在線客服QQ1917067885
在線客服
 
 
會員登錄
登錄
我的資料
我的收藏
留言
回到頂部