精华内容
下载资源
问答
  • 参考文章:http://blog.csdn.net/liou825/article/details/17363265
    参考文章:http://blog.csdn.net/liou825/article/details/17363265
    展开全文
  • 在2000/XP等基于NT 的操作系统中,有一个服务管理,它管理的后台进程被称为 service。服务是一种应用程序类型,它在后台运行,与 UNIX 后台应用程序类似。服务应用程序通常可以在本地和通过网络为用户提供一些功能...

    http://zhidao.baidu.com/question/95260733.html

    在2000/XP等基于NT 的操作系统中,有一个服务管理器,它管理的后台进程被称为 service。服务是一种应用程序类型,它在后台运行,与 UNIX 后台应用程序类似。服务应用程序通常可以在本地和通过网络为用户提供一些功能,例如客户端/服务器应用程序、Web 服务器、数据库服务器以及其他基于服务器的应用程序。 


    后台服务 程序是在后台悄悄运行的。我们通过将自己的程序登记为服务,可以使自己的程序不出现在任务管理器中,并且随系统启动而最先运行,随系统关闭而最后停止。 服务控制管理器是一个RPC 服务器,它显露了一组应用编程接口,程序员可以方便的编写程序来配置服务和控制远程服务器中服务程序。


     服务程序通常编写成控制台类型的应用程序,总的来说,一个遵守服务控制管理程序接口要求的程序包含下面三个函数:

    1.  服务程序主函数(main):调用系统函数 StartServiceCtrlDispatcher 连接程序主线程到服务控制管理程序。

    2. 服务入口点函数(ServiceMain):执行服务初始化任务,同时执行多个服务的服务进程有多个服务入口函数。

    3. 控制服务处理程序函数(Handler):在服务程序收到控制请求时由控制分发线程引用。(此处是Service_Ctrl)。 


    另外在系统运行此服务之前需要安装登记服务程序:installService 函数。删除服务程序则需要先删除服务安装登记:removeService 函数。 


    服务类型:类型 说明 

    SERVICE_FILE_SYSTEM_DRIVER=2 文件系统驱动服务。

     SERVICE_KERNEL_DRIVER=1 驱动服务。 

    SERVICE_WIN32_OWN_PROCESS=16 独占一个进程的服务。 

    SERVICE_WIN32_SHARE_PROCESS=32 与其他服务共享一个进程的服务。 


    新建WIN32控制台程序, 其源文件名为service.cpp 。我用的开发工具是VC++.NET。 


    1.服务程序主函数 服务控制管理程序启动服务程序后,等待服务程序主函数调用系统函StartServiceCtrlDispatcher。一个SERVICE_WIN32_OWN_PROCESS 类型的服务应该立即调用 StartServiceCtrlDispatcher 函数,可以在服务启动后让服务入口点函数完成初始化工作。对于 SERVICE_WIN32_OWN_PROCESS 类型的服务和程序中所有服务共同的初始化工作可以在主函数中完成,但不要超过30秒。否则必须建立另外的线程完成这些共同的初始化工作,从而保证服务程序主函数能及时地调用 StartServiceCtrlDispatcher 函数。 主函数处理了三中命令行参数:- install,- remove,- debug,分别用于安装,删除和调试服务程序。如果不带参数运行,则认为是服务控制管理出现启动该服务程序。参数不正确则给出提示信息。 StartServiceCtrlDispatcher 函数负责把程序主线程连接到服务控制管理程序。具体描述如下:BOOL StartServiceCtrlDispatcher( const LPSERVICE_TABLE_ENTRY lpServiceTable);lpServiceStartTable 指向 SERVICE_TABLE_ENTRY 结构类型的数组,他包含了调用进程所提供的每个服务的入口函数和字符串名。表中的最后一个元素必须为 NULL,指明入口表结束。SERVICE_TABLE_ENTRY 结构具体描述如下: typedef struct _SERVICE_TABLE_ENTRY { LPTSTR lpServiceName; LPSERVICE_MAIN_FUNCTION lpServiceProc;} SERVICE_TABLE_ENTRY, *LPSERVICE_TABLE_ENTRY; lpServiceName 是一个以 NULL 结尾的字符串,标识服务名。如果是 SERVICE_WIN32_OWN_PROCESS 类型的服务,这个字符串会被忽略。lpServiceProc 指向服务入口点函数。 //服务程序主函数。#include "stdafx.h"#include "Windows.h"#define SZAPPNAME "serverSample" //服务程序名#define SZSERVICENAME "serviceSample" //标识服务的内部名 //内部变量bool bDebugServer=false;SERVICE_STATUS ssStatus;SERVICE_STATUS_HANDLE sshStatusHandle;DWORD dwErr=0;TCHAR szErr[256]; //下面的函数由程序实现void WINAPI Service_Main(DWORD dwArgc, LPTSTR *lpszArgv);void WINAPI Service_Ctrl(DWORD dwCtrlCode);void installService();void removeService();void debugService(int argc,char** argv);bool ReportStatusToSCMgr(DWORD dwCurrentState,DWORD dwWin32ExitCode,DWORD dwWaitHint);void AddToMessageLog(LPTSTR lpszMsg); int _tmain(int argc, _TCHAR* argv[]){ SERVICE_TABLE_ENTRY dispatchTable[]= { {TEXT(SZSERVICENAME),(LPSERVICE_MAIN_FUNCTION)Service_Main}, { NULL,NULL} }; if((argc>1)&&((*argv[1]=='-')||(argv[1]=="/"))) { if(_stricmp("install",argv[1]+1)==0) { installService(); } else if(_stricmp("remove",argv[1]+1)==0) { removeService(); } else if(_stricmp("debug",argv[1]+1)==0) { bDebugServer=true; debugService(argc,argv); } else { //如果未能和上面的如何参数匹配,则可能是服务控制管理程序来启动该程序。立即调用 //StartServiceCtrlDispatcher 函数。 printf("%s - install to install the service \n",SZAPPNAME); printf("%s - remove to remove the service \n",SZAPPNAME); printf("%s - debug to debug the service \n",SZAPPNAME); printf("\n StartServiceCtrlDispatcher being called.\n"); printf("This may take several seconds.Please wait.\n"); if(!StartServiceCtrlDispatcher(dispatchTable)) AddToMessageLog(TEXT("StartServiceCtrlDispatcher failed.")); else AddToMessageLog(TEXT("StartServiceCtrlDispatcher OK.")); } exit(0); } return 0;}

    展开全文
  • SpringBoot中Service层事务控制

    千次阅读 2019-11-29 14:18:07
    SpringBoot中使用事务比较简单,在Application启动类上添加@EnableTransactionManagement注解,然后在service层的方法上添加@Transactional注解 @Transactional属性 属性 类型 描述 value String 可...

    SpringBoot中使用事务比较简单,在Application启动类上添加@EnableTransactionManagement注解,然后在service层的方法上添加@Transactional注解

    @Transactional属性 

    属性类型描述
    valueString可选的限定描述符,指定使用的事务管理器
    propagationenum: Propagation可选的事务传播行为设置
    isolationenum: Isolation可选的事务隔离级别设置
    readOnlyboolean读写或只读事务,默认读写
    timeoutint (in seconds granularity)事务超时时间设置
    rollbackForClass对象数组,必须继承自Throwable导致事务回滚的异常类数组
    rollbackForClassName类名数组,必须继承自Throwable导致事务回滚的异常类名字数组
    noRollbackForClass对象数组,必须继承自Throwable不会导致事务回滚的异常类数组
    noRollbackForClassName类名数组,必须继承自Throwable不会导致事务回滚的异常类名字数组

    用法:

            @Transactional 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。

            虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。默认情况下,只有来自外部的方法调用才会被AOP代理捕获,也就是,类内部方法调用本类内部的其他方法并不会引起事务行为,即使被调用方法使用@Transactional注解进行修饰

    注解在方法上:

    @Autowired  
    private MyBatisDao dao;  
      
    @Transactional  
    @Override  
    public void insert(Test test) {  
        dao.insert(test);  
        throw new RuntimeException("test");//抛出unchecked异常,触发事物,回滚  
    }  
    @Transactional(noRollbackFor=RuntimeException.class)  
    @Override  
    public void insert(Test test) {  
        dao.insert(test);  
        //抛出unchecked异常,触发事物,noRollbackFor=RuntimeException.class,不回滚  
        throw new RuntimeException("test");  
    }
    @Transactional(propagation=Propagation.NOT_SUPPORTED)  
    @Override  
    public void insert(Test test) {  
        //事物传播行为是PROPAGATION_NOT_SUPPORTED,以非事务方式运行,不会存入数据库  
        dao.insert(test);  
    }  

     注解在类上:当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性

    @Transactional  
    public class MyBatisServiceImpl implements MyBatisService {  
      
        @Autowired  
        private MyBatisDao dao;  
          
          
        @Override  
        public void insert(Test test) {  
            dao.insert(test);  
            //抛出unchecked异常,触发事物,回滚  
            throw new RuntimeException("test");  
        }
    }

    注意:有时候在开发时往往出现了添加注解后却无法回滚

    原因:默认Spring事务只在发生未被捕获的RuntimeException时才回滚。  
    Spring AOP异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样AOP代理才能捕获到方法的异常,才能进行回滚,默认情况下AOP只捕获 RuntimeException 的异常,但可以通过配置来捕获特定的异常并回滚  
    换句话说在service的方法中不使用try...catch或者在catch中最后加上throw new runtimeexcetpion(),这样程序异常时才能被aop捕获进而回滚。

    解决方案:

      1.在service层方法的catch语句中抛出RuntimeException异常(如在catch中需要抛出自定义的异常则只需自定义异常继承RuntimeException即可),从而触发Spring的异常捕获机制进行事务回滚,但这种方式需要上层处理异常。

      2.在service层方法的catch语句中增加如下语句,手动回滚,这样上层就无需去处理异常:

    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()

     

    展开全文
  • springBoot service层 事务控制

    千次阅读 2019-06-06 00:00:30
    springBoot使用事物比较简单,在Application启动类s上添加@EnableTransactionManagement注解,然后在service层的方法上添加@Transactional注解 @Transactional属性 属性 类型 描述 valu...

    原文地址:https://www.cnblogs.com/tongxuping/p/7650293.html

    springBoot使用事物比较简单,在Application启动类s上添加@EnableTransactionManagement注解,然后在service层的方法上添加@Transactional注解

    @Transactional属性 

    属性类型描述
    valueString可选的限定描述符,指定使用的事务管理器
    propagationenum: Propagation可选的事务传播行为设置
    isolationenum: Isolation可选的事务隔离级别设置
    readOnlyboolean读写或只读事务,默认读写
    timeoutint (in seconds granularity)事务超时时间设置
    rollbackForClass对象数组,必须继承自Throwable导致事务回滚的异常类数组
    rollbackForClassName类名数组,必须继承自Throwable导致事务回滚的异常类名字数组
    noRollbackForClass对象数组,必须继承自Throwable不会导致事务回滚的异常类数组
    noRollbackForClassName类名数组,必须继承自Throwable不会导致事务回滚的异常类名字数组

    用法:

           @Transactional 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。

             虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。

            默认情况下,只有来自外部的方法调用才会被AOP代理捕获,也就是,类内部方法调用本类内部的其他方法并不会引起事务行为,即使被调用方法使用@Transactional注解进行修饰。

      

      注解在方法上:

    @Autowired  
    private MyBatisDao dao;  
      
    @Transactional  
    @Override  
    public void insert(Test test) {  
        dao.insert(test);  
        throw new RuntimeException("test");//抛出unchecked异常,触发事物,回滚  
    }  

      

        @Transactional(noRollbackFor=RuntimeException.class)  
        @Override  
        public void insert(Test test) {  
            dao.insert(test);  
            //抛出unchecked异常,触发事物,noRollbackFor=RuntimeException.class,不回滚  
            throw new RuntimeException("test");  
        }  

      

    @Transactional(propagation=Propagation.NOT_SUPPORTED)  
    @Override  
    public void insert(Test test) {  
        //事物传播行为是PROPAGATION_NOT_SUPPORTED,以非事务方式运行,不会存入数据库  
        dao.insert(test);  
    }  

      注解在类上:当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性

     

    @Transactional  
    public class MyBatisServiceImpl implements MyBatisService {  
      
        @Autowired  
        private MyBatisDao dao;  
          
          
        @Override  
        public void insert(Test test) {  
            dao.insert(test);  
            //抛出unchecked异常,触发事物,回滚  
            throw new RuntimeException("test");  
        }  

     

    注意:有时候在开发时往往出现了添加注解后却无法回滚

    原因:默认spring事务只在发生未被捕获的 RuntimeException 时才回滚。  
    spring aop  异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚,默认情况下aop只捕获 RuntimeException 的异常,但可以通过配置来捕获特定的异常并回滚  
    换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new runtimeexcetpion(),这样程序异常时才能被aop捕获进而回滚。

     

    解决方案:

      1.在service层方法抛出RuntimeException异常(如在Catch中需要抛出自定义的异常则只需自定义异常继承RuntimeException即可),并继续捕获和处理这个异常。

      2.在service层方法的catch语句中增加:

        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

      语句,手动回滚,这样上层就无需去处理异常。

    展开全文
  • C#使用ServiceController控制windows服务

    万次阅读 2015-03-14 23:45:54
    C#中,使用ServiceController类控制windows服务,使用之前要先添加引用:System.ServiceProcess,然后在命名空间中引用:using System.ServiceProcess。下面举例获取本机的所有已安装的Windows服务和应用,然后查找...
  • /// 构造函数注入---控制器得是由容器来实例化 /// </summary> /// <param name="userService"></param> /// <param name="companyService"></param> /...
  • 文章目录一:k8s的五种控制器1.1:k8s的控制器类型1.2:Deployment控制器1.2.1:测试deployment控制器1.3:SatefulSet控制器1.3.1:创建无头服务的service资源和dns资源1.3.2:创建statefulset资源1.4:DaemonSet...
  • Tp中的多层控制器和多级控制器使用

    千次阅读 2017-03-17 17:54:46
    多层控制器的目录结构是这样的: ├─Controller 访问控制器 │ ├─UserController.class.php │ ├─BlogController.class.php │ ... ├─Event 事件控制器 │ ├─UserEvent.class.php │ ├─BlogEvent....
  • Web Service如何进行权限控制? 解决思路:服务器端要求input消息总是携带有用户名,密码信息,如果没有用户名和密码信息,直接拒绝调用 解决方案:拦截 为了让程序员能访问,并修改CXF框架所生成的SOAP消息,...
  • 控制器层对服务层进行调用 服务层分两种,一种是公共service,这个...在控制器层,对公共service调用的话,只要实例化这个service就好了。 如下面的例子,我就在公共的controller里面增加了一个方法,然后对公共se
  • AngularJS-控制器篇(controller)

    千次阅读 2017-04-28 15:50:44
    今天公司突然停电了,临时回家,哈哈 莫名很兴奋。     回家里已经把工作做完,今晚上一起看个电影啊 度过愉快的周末~ ...说说今天的用的控制器 再出去耍...控制器是AngularJS的核心之一,它的作用主要是对视图中的
  • SDN控制器OpenDaylight简介

    万次阅读 2019-03-24 20:18:19
    Open Daylight是一个高度可用、模块化、可扩展、支持多协议的控制器平台,可以作为SDN管理平面管理多厂商异构的SDN网络。它提供了一个模型驱动服务抽象层( MD-SAL),允许用户采用不同的南向协议在不同厂商的底层转发...
  • Service和Activity有啥区别?Service有哪些类型?它们是怎么实现?什么场景下使用?本文将详细为你介绍Service的使用方法,让你深入浅出。
  • ASP.NET/C# 控制器Controller的深入理解

    千次阅读 2019-02-23 11:47:35
    ASP.NET/C# 控制器Controller的深入理解 1.理解控制器 1.1控制器的角色 (1)中转作用:控制器通过前面的学习大家应该知道它是一个承上启下的作用,根据用户输入,执行响应行为(动作方法),同时在行为中调用模型的...
  • 1、图解AUTOSAR(一)——简介及目标 2、图解AUTOSAR(二)——...5、图解AUTOSAR(五)——微控制器抽象层(MCAL) 6、图解AUTOSAR(六)——服务层(Service Layer)、复杂驱动(Complex Drivers) 7、AUTOSA...
  • 今天用ThinkPHP5.1的时候,想尝试一下另一...模块 控制器 方法 没想到报了个控制器不存在 我的控制器名字应该是UserController,他自动变成了Usercontroller 看手册才知道,框架默认是把所有请求的控制器名都转为小...
  • 有关windows service的详细介绍,不在本文叙述。如果想了解,自己到网上去搜一搜,关键词就是“windows service”,搜索结果保证不会让你失望,呵呵!本文的预期读者即为对windows service有一定了解,但又没有编写...
  • 7、Kubernetes Pod 控制器

    万次阅读 2020-02-25 08:12:13
    什么是控制器 Kubernetes 中内建了很多 controller(控制器),这些相当于一个状态机,用来控制 Pod 的具体状态和行为 控制器类型 ReplicationController 和 ReplicaSet Deployment DaemonSet StateFulSet Job/Cron...
  • 1、仅一次控制器 作用是把请求放到仅一次里面的时候,不管循环数写几次,放到仅一次控制器里的请求都只跑一次,大部分用在登录,一般就登录一次就可以了,还有jdbc连接 也是连接一次就可以了,不用重复连接。 2、If...
  • 当我们卸载域控制器上的 Active Directory 时,这个域控制器会自动把自己所承担的操作主机角色转移给自己的复制伙伴,这个过程完全不需要管理员的干预。但如果我们希望指定一个域控制器来负责操作主机角色,我们就...
  • 上一篇文章《Windows Service服务程序(0)服务主函数 & 控制处理函数》对Windows服务开发做了初步讲解。服务编写完成后,还需要服务管理程序才可以运行。一种方式是上篇文章中介绍的使用系统服务管理工具,如sc.exe...
  • angularJs控制器执行顺序

    千次阅读 2016-05-26 16:07:00
    js书写控制器的顺序无所谓,它不会立刻实例化这些控制器,也不会在加载js以后就执行控制器里的代码,也不会注入服务和指令. 当解析html的时候,它的ng-controller遇到什么控制器,它就去实例化哪个控制器.这个时候,控制器...
  • 接着上一篇的实例,我们通过Routing Service使用了 filterType="EndpointName" 来转发客户端的请求,映射到内部多个服务上。但问题又来了,比如有2个内部服务A,B。有N个客户端,并不是所有的客户端同时都有对A,B的...
  • 依赖注入 控制反转 服务定位 模式 Dependency Injection Inversion of Control IoC Service Locator Patterns撰文/Martin Fowler 编译/透明Java 社群近来掀起了一阵轻量级容器的热潮,这些容器能够帮助开发者将...
  • K8S 的 5种控制器

    千次阅读 2020-05-25 20:32:14
    Pod通过控制器实现应用的运维,如伸缩、升级等,控制器决定了创建pod资源的方式和类型,在集群上管理和运行容器的对象通过label-selector 相关联。 控制器 又称之为工作负载,分别包含以下类型控制器: 5种控制器...
  • Service Mesh 入门实战

    千次阅读 2018-04-12 10:41:41
    课程介绍 过去一年时间,Service Mesh 悄然兴起,成为云堆栈的一个重要组件。...本系列课程将带领读者学习什么是 Service Mesh, Service Mesh 能做什么,为什么 Service Mesh 是构建云原生应用的主要...
  • Service Mesh是什么技术

    千次阅读 2018-05-09 22:07:41
    最近在在准备阿里天池的中间件大赛,接触到Service Mesh的技术,之前真没听过这么一词儿(佝偻寡闻),Service Mesh 其实是在当前微服务或者云原生应用领域的一个...
  • SDN控制器之POX篇

    万次阅读 2015-05-22 17:09:13
    启用pox控制器并同openflow交换机连接后,就可以使用pox控制器下发流表项了,这里先介绍一下下发流表项中各个匹配项和动作的命令。 匹配字段 编辑消息,消息类型为flowmod 命令:POX> msg=of.ofp_flow_...
  • Kubernetes之Service

    千次阅读 2018-07-25 18:17:16
    Kubernetes中的pod并不稳定,比如由ReplicaSet、Deployment、DaemonSet等副本控制器创建的pod,其副本数量、pod名称、pod所运行的节点、pod的IP地址等,会随着集群规模、节点状态、用户缩放等因素动态变化。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 372,649
精华内容 149,059
关键字:

service是控制器吗