net.sz.framework 框架 轻松搭建服务—让你还专注逻辑成效—初探

定时器任务实现

以预告项目下与main包同级别下起timer包

建文件ServerInfoTimer 每一样秒钟执行 需要手动注册的定时器任务尽;

我们临时在公共线程执行的定时器

sqlite 1sqlite 2

 1 package net.sz.blog.test.timer;
 2 
 3 import net.sz.framework.szlog.SzLogger;
 4 import net.sz.framework.szthread.TimerTaskModel;
 5 
 6 /**
 7  *
 8  * <br>
 9  * author 失足程序员<br>
10  * blog http://www.cnblogs.com/ty408/<br>
11  * mail 492794628@qq.com<br>
12  * phone 13882122019<br>
13  */
14 public class ServerInfoTimer extends TimerTaskModel {
15 
16     private static SzLogger log = SzLogger.getLogger();
17 
18     public ServerInfoTimer() {
19         super(1000);/*一秒钟无限执行*/
20     }
21 
22     @Override
23     public void run() {
24         log.error("我是主项目里面执行定时器");
25     }
26 
27 }

View Code

 

对接下去咱们于本子项目蒙仍旧main同级别建立timer包

树立Test提姆erScript脚杂谈件,这里的定时器仍然是各国一样分钟执行,不过是活动执行的不用线程注册; 

sqlite 3sqlite 4

 1 package net.sz.blog.test.scripts.timer;
 2 
 3 import net.sz.framework.szlog.SzLogger;
 4 import net.sz.framework.szthread.timer.iscript.ISecondsEventTimerScript;
 5 
 6 /**
 7  *
 8  * <br>
 9  * author 失足程序员<br>
10  * blog http://www.cnblogs.com/ty408/<br>
11  * mail 492794628@qq.com<br>
12  * phone 13882122019<br>
13  */
14 public class TestTimerScript implements ISecondsEventTimerScript {
15 
16     private static SzLogger log = SzLogger.getLogger();
17 
18     /*自动调用*/
19     @Override
20     public void run(int sec) {
21         log.error("我是脚本里面执行定时器");
22     }
23 
24 }

View Code

 

 我们于主函数main方法吃入ServerInfo提姆er 定时器的手动注册代码

        /*主动注册,选择线程执行的定时器任务*/
        ThreadPool.addTimerTask(ThreadPool.GlobalThread, new ServerInfoTimer());

        /*
        值的注意,服务器程序准备好工作后,我们必须设置这个参数
        这时因为本线程池线程分为 sys线程 和 user线程;
        没有这个标识,user线程是不会执行定时器操作的;
        */
        ThreadPool.setStarEnd(true);

 

探望效果先

sqlite 5

 

Holle world

第一打开NetBeans工具

新建项目 net.sz.blog.test

sqlite 6

下一场我们更依照平的形式新建 项目net.sz.blog.test-scipts

我们在主类中补充加对主项目启动函数脚论接口的援,等待加载脚本的时刻注入;

咱俩当本子项目下建立main包添加AppManagerScript脚散文件

 1 package net.sz.blog.test.scripts.main;
 2 
 3 import net.sz.blog.test.main.Test_App_Manager;
 4 import net.sz.blog.test.main.iscript.IAppManagerScript;
 5 import net.sz.framework.szlog.SzLogger;
 6 
 7 /**
 8  *
 9  * <br>
10  * author 失足程序员<br>
11  * blog http://www.cnblogs.com/ty408/<br>
12  * mail 492794628@qq.com<br>
13  * phone 13882122019<br>
14  */
15 public class AppManagerScript implements IAppManagerScript {
16 
17     private static SzLogger log = SzLogger.getLogger();
18 
19     @Override
20     public void _init() {
21         /*把脚本反向注册回主项目函数*/
22         Test_App_Manager.setiAppManagerScript(this);
23     }
24 
25     @Override
26     public void startEnd() {
27         log.error("主项目单例模式脚本调用函数执行");
28         /* holle world! 放在脚本打印 */
29         log.error("holle world!");
30     }
31 
32     @Override
33     public void stop() {
34     }
35 
36 }

 

 顺利完成了剧本的报,输出holle world 

sqlite 7

些微栽定时任务履行;值的小心的凡在本子的定时器任务无法执行长期任务,那样会占用其他定时器任务的尽时间;一般作为定时触发器;

到此地 net.sz.framework java 版本基础运用就成功 

sqlite,C#本子的代码还待更为结合,所以尽管少无松开出去;

net.sz.framework 能召开啊为?

net.sz.framework
是通过差不多年实施及探究,包括在线项目征的底框架,致力为解决框架问题;

为您更自在,愉快,神速,方便的出自己之服务器(无论是游戏,微服务,webapi,数据主导,中转核心,数据并焦点,im服务器等);

让您轻轻松松处理多线程,线程池,线程控制,无需过多着想多线程的线程安全;

深受您管需过多着想socket传输问题,socket粘包,分包,分包一切;

吃你轻松搭建实现冲 tcp协议 服务,基于 http协议 服务;

深受你轻轻松松在程序中贯彻自由定时器,任意定时触发器;

于您轻轻松松将 .java 和 .cs
的文件作为脚本使用还原你熟习的下论无需于错过学学外脚本语言;

于您轻轻松松处理数据库 mysql ,
sqlite(可继续扩展外数据源),数据存储,读取的疾速模式;

叫您轻轻松松解决高并发文件日志存储结构,记录完整日志数据;

日志处理要默认参数有涂改得直接调用属性设置也得以据此配备文件举行改动

sqlite 8

用以类型外源根目录在文件szlogger.ini

 1 ########## 日志信息配置 ##########
 2 # 日志级别  不区分大小写  debug:调试信息  info:普通信息   WARN:警告信息  ERROR:错误信息  FATAL:严重错误信息
 3 LOG_LEVEL = debug
 4 # 是否输出到控制台(默认为false)
 5 CONSOLE_PRINT = true
 6 # 是否输出到文件(默认为true)
 7 CONSOLE_FILE = true
 8 # 是否输出到文件(默认为true)
 9 CONSOLE_FILE_BUFFER = true
10 # 日志文件存放路径
11 LOG_PATH =../log/sz.log

 

s

铭记脚本项目标连串名字是主项目名字+ (-scripts);读取脚本文件的约定;

类型开创好后,大家调用情势,需要处理的凡增长引用;依照自己要求,参与框架库引用;

 

sqlite 9

预告项目松阳高腔本项目目录结构,脚本项目倚重让主项目

本次重大教学实现脚本和定时器任务;

咱俩现在主项目下建立 main 包在main包下边建立iscript包

咱建主函数底下论接口

sqlite 10sqlite 11

 1 package net.sz.blog.test.main.iscript;
 2 
 3 import net.sz.framework.scripts.IInitBaseScript;
 4 
 5 /**
 6  * 主脚本
 7  * <br>
 8  * author 失足程序员<br>
 9  * blog http://www.cnblogs.com/ty408/<br>
10  * mail 492794628@qq.com<br>
11  * phone 13882122019<br>
12  */
13 public interface IAppManagerScript extends IInitBaseScript {
14 
15     /*程序启动完成后调用脚本函数*/
16     void startEnd();
17     
18     /*需要停止服务器的时候调用的脚本*/
19     void stop();
20 }

View Code

 

 大家于main包上边建立主类Test_App_Manager

 1 package net.sz.blog.test.main;
 2 
 3 import java.util.ArrayList;
 4 import net.sz.blog.test.main.iscript.IAppManagerScript;
 5 import net.sz.framework.scripts.manager.ScriptManager;
 6 import net.sz.framework.szlog.SzLogger;
 7 
 8 /**
 9  *
10  * <br>
11  * author 失足程序员<br>
12  * blog http://www.cnblogs.com/ty408/<br>
13  * mail 492794628@qq.com<br>
14  * phone 13882122019<br>
15  */
16 public class Test_App_Manager {
17 
18     private static SzLogger log = SzLogger.getLogger();
19     /*单例脚本,脚本反向注册,而非集合调用*/
20     private static IAppManagerScript iAppManagerScript = null;
21 
22     public static IAppManagerScript getiAppManagerScript() {
23         return iAppManagerScript;
24     }
25 
26     public static void setiAppManagerScript(IAppManagerScript iAppManagerScript) {
27         Test_App_Manager.iAppManagerScript = iAppManagerScript;
28     }
29 
30     public static void main(String[] args) {
31 
32         /*加载所有脚本文件,默认加载项目路径 -scripts 文件下面所有问题*/
33         ArrayList<String> loadScripts = ScriptManager.getInstance().reload();
34         String join = String.join(",", loadScripts);
35         log.error("脚本加载结果:" + join);
36 
37         if (iAppManagerScript != null) {
38             /*调用启动脚本*/
39             iAppManagerScript.startEnd();
40         }
41 
42     }
43 }

 

前言

 在此前的小说被,讲解了 threadmodel,socket tcp ,socket
http,log,astart ,scripts;

且是分片讲解,从后天始发,将牵动我们,一窥 net.sz.framework 框架;

net.sz.framework 框架分为java版本和C#.net
版本,两栽语言版保持高一致性;

网站地图xml地图