发表于: 2018-01-26 16:46:18

3 783


今天还是来啃这块难啃的骨头---->一定要弄出来

今天先把demo跑起来----->后面在慢慢总结

代码终于跑成功了----->

这个是Aop的切面的代码

 

@Aspect 注解表示这是一个切面

@Component 表示这是一个bean,Spring进行管理

@Around(value = "execution(* com.fuwei.service.ProductService.*(..))") 表示对com.how2java.service.ProductService 这个类中的所有方法进行切面操作

package com.fuwei.aop;

 

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.aspectj.lang.ProceedingJoinPoint;

import org.aspectj.lang.annotation.Around;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.reflect.MethodSignature;

import org.springframework.stereotype.Component;

/**

* 检测方法执行耗时的spring切面类

* 使用@Aspect注解的类,Spring将会把它当作一个特殊的Bean(一个切面),也就是不对这个类本身进行动态代理

* @author blinkfox

* @date 2016-07-04

*/

@Aspect

@Component

public class LoggerAspect {

private static Log logger = LogFactory.getLog(LoggerAspect.class);

private static final long ONE_MINUTE = 10000;

@Around(value = "execution(* com.fuwei.service.ProductService.*(..))")

public Object log(ProceedingJoinPoint joinPoint) throws Throwable {

// 定义返回对象、得到方法需要的参数

Object obj = null;

Object[] args = joinPoint.getArgs();

long startTime = System.currentTimeMillis();

 

try {

obj = joinPoint.proceed(args);

} catch (Throwable e) {

logger.error("统计某方法执行耗时环绕通知出错", e);

}

 

// 获取执行的方法名

long endTime = System.currentTimeMillis();

MethodSignature signature = (MethodSignature) joinPoint.getSignature();

String methodName = signature.getDeclaringTypeName() + "." + signature.getName();

 

// 打印耗时的信息

this.printExecTime(methodName, startTime, endTime);

 

return obj;

}

 

/**

* 打印方法执行耗时的信息,如果超过了一定的时间,才打印

* @param methodName

* @param startTime

* @param endTime

*/

private void printExecTime(String methodName, long startTime, long endTime) {

long diffTime = endTime - startTime;

System.out.println("-----" + methodName + " 方法执行耗时:" + diffTime + " ms");

if (diffTime > ONE_MINUTE) {

logger.warn("-----" + methodName + " 方法执行耗时:" + diffTime + " ms");

}

}

}

applicationContext.xml

<context:component-scan base-package="com.fuwei.aop"/>

<context:component-scan base-package="com.fuwei.service"/>

扫描包com.fuwei.aspectcom.fuwei.service,定位业务类和切面类

<aop:aspectj-autoproxy/>

找到被注解了的切面类,进行切面配置

<context:component-scan base-package="com.fuwei.aop"/>

<context:component-scan base-package="com.fuwei.service"/>

<aop:aspectj-autoproxy/>

运行测试的结果

                                             

终于打印出时间来了

弄了几天啦----->现在对AOP有了新的认识(最开始的代码是没有问题)

就是代码里面的bean的注入哪里调用list()查询数据库---->page没有传值,空指针异常,一直打印不出来,现在将page里面的默认的null删除----->就可以啦

主要是开始一直在弄那个代码的问题换了几个版本----->后面就检查细节

多访问都可以实现不同的查询

接下来就是深度思考的内容

1.nginx服务器有什么作用?什么叫反向代理?为什么要使用反向代理?

(https://www.jianshu.com/p/ab44b933a68f)参考文档

nginx是什么?

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,

 

反向代理(上次的Nginx的安装配置里面也有提到)

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,

简单来说就是真实的服务器不能直接被外部网络访问,想要访问必须通过代理。

 

主要的目的负载均衡--->减轻服务器的负荷

 

2.什么是ssh?如何在linux服务器上从网站下载文件?

因为好多公司还是其他的网站都是部署在linux的系统下,所以命令关于ssh的操作的命令要比较熟悉

由于使用ssh,我们无法使用简单的拖拽或者复制粘贴操作对本地计算机和ssh服务器上的文件进行交流。我们需要用到scp命令行。

程序代码

    scp <本地文件名> <用户名>@<ssh服务器地址>:<上传保存路径即文件名>    /*注:必须在未登录服务器的情况下*/

 

1.知道远程文件夹的路径,主机名,ip及密码;

2.在终端上输出

scp -r xxxx@ip地址:路径/文件名/ ~/

即可将文件夹拷贝到home目录下。

例如

scp -r computer@10.0.0.522:/home/hello/ ~/

即可将远程电脑home目录下的hello文件拷贝到本地电脑的home目录下

3.如何写shell脚本?尝试自己编写一个简单脚本。

昨天的笔记完成过了

 

4.tomcatjettyresin各容器有什么区别?如何优化这些容器配置?

https://www.jianshu.com/p/8465131bcabf(参考文档)

生产环境经常用到的服务器

Tomcat应该是最多,jetty通常被用作内嵌的web容器resin是用的最少的,但resin还有其他的例如ejb容器。

tomcat

启动文件在bin下的startup.bat

Tomcat的配置文件中,一个Web应用就是一个特定的Context,可以通过在server.xml中新建Context里部署一个JSP应用程序。打开server.xml文件,在Host标签内建一个Context,内容如下。

tomcat中的conf目录中,在server.xml中的,节点中添加:

 

resin

Resin启动应用时,跟Tomcat一样会将jsp编译成可执行文件,保存到应用的WEB-INF/work目录下,tem是临时文件夹,也是在应用的WEB-INF/temp目录下,这里可以修改指向到其他的地方。

jetty

Jetty 是一个开源的servlet容器,它为基于Javaweb容器,例如JSPservlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布.看见有木有,它是用java语言写的,所以我们就不必启动任何插件只需要引入一些jar包,即可将自己的servlet部署到网页上,我们只需要写一个启动类.

 

今天完成的事情:今天终于完成Aop的日志的统计访问DB连接的时间,还有对深度思考的理解

 

明天的计划:准备任务四,任务三的Aop耽误了很多的时间,就是那个日志的切面编程,浪费了很多时间

 

今天遇到的困难:就是代码里面的bean的注入哪里调用list()查询数据库---->page没有传值,空指针异常,一直打印不出来,现在将page里面的默认的null删除----->就可以啦

 

收获:就是对AOp有了新的了解,还有对日志打印认识很重要,最近完成对linux和服务器的了解熟悉啦

 



返回列表 返回列表
评论

    分享到