使用telnet连接到基于spring的应用上执行容器中的bean的任意方法
使用telnet连接到基于spring的应用上执行容器中的bean的任意方法 使用telnet连接到基于spring的应用上执行容器中配置的任何bean的任意方法,可以用来诊断某个方法是否执行有问题,响应时间多少,在生产环境中可以很好的定位及监控方法是否存在问题。 代码在:https://github.com/zhwj184/springInvokemonitor git clone [email protected]:zhwj184/springInvokemonitor.git maven clean install pom依赖: <dependency> <groupId>org.zhwj184</groupId> <artifactId>springinvokemonitor</artifactId> <version>1.0-SNAPSHOT</version> </dependency> 使用方式,在spring的配置文件中添加下面这个bean即可。 <bean id="ServiceInvokeClient" class="org.zhwj184.ServiceInvokeClient" /> 使用示例:先写一个service TestBean,里面有两个方法,add和addBean import com.alibaba.fastjson.JSON; public class TestBean { public float add(int a, float b){ return a + b; } public A addBean(A a, A b){ A c = new A(); c.setC(a.getC() + b.getC()); c.setD(a.getD() + b.getD()); return c; } public static void main(String[] args) { A c = new A(); c.setC(23); c.setD(323.34); System.out.println(JSON.toJSON(c)); } } class A{ int c ; double d; public int getC() { return c; } public void setC(int c) { this.c = c; } public double getD() { return d; } public void setD(double d) { this.d = d; } } 然后在spring配置文件 service.xml添加 <bean id="testBean" class="org.zhwj184.TestBean" /> <bean id="ServiceInvokeClient" class="org.zhwj184.ServiceInvokeClient" /> 写一个测试类,执行这个main方法, import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainTest { /** * @param args * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:service.xml"); Thread.sleep(100000000); } } 然后通过telnet连到这个服务上,打开命令行窗口,输入telnet localhost 12667,连上之后,输入ls bean名称,即可查询这个bean的所有方法,使用invoke beanname.method(param1,param2) 执行某个方法,参数如果为bean则可以使用json格式传入,参数之间用;分隔 ====================================================== Welcome to Telnet Server: Version 1.0 ====================================================== List of possible commands: Status: displays the status of the server cd : [ cd /usr/local] pwd: displays the working directory ls: displays list of files in the working directory mkdir : [ mkdir /usr/local/tmp] exit : quit this programme ls testBean org.zhwj184.A org.zhwj184.TestBean.addBean(org.zhwj184.A,org.zhwj184.A) void org.zhwj184.TestBean.main([Ljava.lang.String;) float org.zhwj184.TestBean.add(int,float) int org.zhwj184.TestBean.hashCode() java.lang.Class org.zhwj184.TestBean.getClass() void org.zhwj184.TestBean.wait(long,int) void org.zhwj184.TestBean.wait() void org.zhwj184.TestBean.wait(long) boolean org.zhwj184.TestBean.equals(java.lang.Object) java.lang.String org.zhwj184.TestBean.toString() void org.zhwj184.TestBean.notify() void org.zhwj184.TestBean.notifyAll() invoke testBean.add(1;2.4) result:java.lang.Float 3.4 run time: 0ms invoke testBean.addBean({"c":23,"d":323.34};{"c":3433,"d":3232433.34}) result:org.zhwj184.A {"c":3456,"d":3232756.6799999997} run time: 0ms 这样可以诊断spring容易中任何bean的任意方法,执行方法,看看返回结果是否跟预期的一致。一般生产环境跟测试环境很多依赖条件(数据库,服务等)都不一样,所以线上出现问题一般都可以知道参数,通过执行方法就可以看看结果是否正确,并且查看某个方法的执行时间来看方法是否有性能问题。 不过这里的代码只是简单做个示例,代码中关于参数的类型,结果匹配反射等可能不够完善也没有测试得很充分,有问题有兴趣的环境反馈给我。
相关推荐
Fightingxr 2020-06-26
ROES 2020-04-29
因为设备或终端是遍布整个省或市,有的甚至是国外,如何高效的处理问题是当务之急,除了telnet还可以ssh使用crt软件登陆,telnet开启的话比较方便windows自带的cmd命令行下就可以运行。
88236637 2020-04-16
hpujsj 2020-03-03
Proudoffaith 2020-02-23
笑面依旧 2020-01-18
engineer0 2013-08-02
站在高处眺望 2019-12-30
LiHansiyuan 2019-12-24
vanturman 2019-12-12
pwl 2008-08-06
小惠 2016-05-05
鹏鹏之家 2008-06-26
wys 2008-04-14
bjkamui 2007-10-22