1. 程式人生 > >springboot使用註解配置要監聽的介面並記錄日誌

springboot使用註解配置要監聽的介面並記錄日誌

1. 新增依賴

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-aop</artifactId>

</dependency>


2. 編寫自定義註解類

package com.atguigu.springcloud.interfacePackage;

import java.lang.annotation.*;

@Target({ ElementType.METHOD, ElementType.TYPE })

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface MyLog {

    String value();

}

3. 編寫註解類切面

package com.atguigu.springcloud.aop;

import com.atguigu.springcloud.interfacePackage.MyLog;
import com.atguigu.springcloud.log.InterFaceLog;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.Arrays;


@Aspect
@Component
public class WebLogAspect {
    ThreadLocal<Long> startTime = new ThreadLocal<>();
    ThreadLocal<InterFaceLog> log = new ThreadLocal<>();
    InterFaceLog interfaceLog =  new InterFaceLog();

    @Pointcut("@annotation(com.atguigu.springcloud.interfacePackage.MyLog)")
    public void annotationPointCut(){}

    @Before("annotationPointCut()")
    public void doBefore(JoinPoint joinPoint) throws Throwable {
        // 接收到請求,記錄請求內容
        startTime.set(System.currentTimeMillis());
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        String url = request.getRequestURL().toString();
        String method = request.getMethod();
        String remoteAddr = request.getRemoteAddr();
        String class_method = joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName();
        String param = Arrays.toString(joinPoint.getArgs());
        log.set(interfaceLog);


        MethodSignature sign =  (MethodSignature)joinPoint.getSignature();
        Method method2 = sign.getMethod();
        MyLog annotation = method2.getAnnotation(MyLog.class);
        System.out.print("列印:"+annotation.value()+" 前置日誌");
    }

    @AfterReturning(returning = "ret", pointcut = "annotationPointCut()")
    public void doAfterReturning(Object ret) throws Throwable {
        String result = ret.toString();
        InterFaceLog logAfter =  log.get();
        Long time = System.currentTimeMillis() - startTime.get();
        System.out.println(logAfter);
    }
}

4、在啟動類中新增對aspect的支援

@EnableAspectJAutoProxy//沒有用到

5、在controller層中使用註解

package com.atguigu.springcloud.controller;

import java.util.List;

import com.atguigu.springcloud.interfacePackage.MyLog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.atguigu.springcloud.entities.Dept;
import com.atguigu.springcloud.service.DeptService;

@RestController
public class DeptController
{
	@Autowired
	private DeptService service;

	@Autowired
	private DiscoveryClient client;

	@RequestMapping(value = "/dept/add", method = RequestMethod.POST)
	public boolean add(@RequestBody Dept dept)
	{
		return service.add(dept);
	}

	@RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
	public Dept get(@PathVariable("id") Long id)
	{
		return service.get(id);
	}
	@MyLog("測試")
	@RequestMapping(value = "/dept/list", method = RequestMethod.GET)
	public List<Dept> list()
	{
		return service.list();
	}
	@RequestMapping(value = "/dept/discovery", method = RequestMethod.GET)
	public Object discovery()
	{
		/**獲取eureka裡面的服務*/
		List<String> list = client.getServices();
		System.out.println("**********" + list);

		List<ServiceInstance> srvList = client.getInstances("MICROSERVICECLOUD-DEPT");
		for (ServiceInstance element : srvList) {
			System.out.println(element.getServiceId() + "\t" + element.getHost() + "\t" + element.getPort() + "\t"
					+ element.getUri());
		}
		return this.client;
	}
}

相關推薦

springboot使用註解配置介面記錄日誌

1. 新增依賴 <dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-aop<

python3 重複介面更新下載檔案

詳細場景如下:定時監聽介面,介面根據傳來的version值與當前版本對比,如果版本號一致,則繼續監聽,否則下載更新並執行一個shell指令碼。 主要使用了urllib庫中request模組完成。 詳細程式碼如下: from threading import Timer

Redis實現key過期操作redis的多個數據庫,整合到SpringBoot

最近來了個新的需求,需要使用定時器完成,本想以為用個@Scheduled()就輕易搞定的,詳細瞭解後,事情卻並沒有這麼簡單......。所以接到需求後,需要找產品明確明確再次明確,才開工,不然的話你本以為做好的工作卻是一場空。 業務場景邏輯解析:第一個請求進來,需要把請求引

@WebListener 註解方式實現

sun listener etc 修改 tom imp exti .get xsd 1.創建 Dynamic Web Project ,Dynamic Web module version選擇3.0 2.在自動生成 的web.xml配置,增加 metadata-com

16.4 配置Tomcat80端口 16.5/16.6/16.7 配置Tomcat虛擬主機 16.8 Tomcat日誌

16.4 配置tomcat監聽80端口 16.5/16.6/16.7 配置tomcat虛擬主機 16.8 tomcat日誌16.4 配置Tomcat監聽80端口16.5/16.6/16.7 配置Tomcat虛擬主機16.8 Tomcat日誌擴展邱李的tomcat文檔 https://www.linuser

配置Tomcat80端口、配置Tomcat虛擬主機、Tomcat日誌

tomcat服務配置Tomcat監聽80端口1、[root@centos7 package]# vim /usr/local/tomcat/conf/server.xml <Connector port="80" protocol="HTTP/1.1" connection

tomcat 安裝實例(二) 配置tomcat80端口

logs local cal 占用 ges 監聽 post web程序 程序 vim /usr/local/tomcat/conf/server.xml #編輯TOMCAT的配置文件 搜索8080 如果發現80端口被其他web程序占用了,

Tomcat(介紹,JDK安裝,Tomcat安裝,配置Tomcat80端口)

必須 bin rgb 命令 mct local bak $path 系統 一、Tomcat介紹目前有很多網站是用Java編寫的,所以解析Java程序就必須有相關的軟件來完成,Tomcat就是其中之一Tomcat是Apache軟件基金會,的Jakarta項目中的一個核心項目,

配置Tomcat80端口、虛擬主機、日誌

說明 訪問日誌 reat release webapp eat all ets pre 16.4 配置Tomcat監聽80端口 修改配置文件 [root@taoyun src]# vim /usr/local/tomcat/conf/server.xml #可以修改成

配置tomcat80端口、配置tomcat虛擬機、tomcat日誌

classname nginx代理 data restart cal 停止 環境 生產環境 netstat 配置tomcat監聽80端口 tomcat 監聽的是8080端口,如果想要直接訪問,不加8080端口(默認輸入一個IP或者域名,訪問80端口時是可以省略IP後端口號

配置Tomcat80端口、 配置Tomcat虛擬主機、 Tomcat日誌

瀏覽器 目錄的作用 虛擬主機 bin protoc 相同 其中 日誌文件 true 配置Tomcat監聽80端口 Tomcat監聽的是8080端口,也可以自定義為80

SpringBoot入門之事件

int () AI stat boot.s over style 資源 nvi   spring boot在啟動過程中增加事件監聽機制,為用戶功能拓展提供極大的便利,sptingboot支持的事件類型有以下五種: ApplicationStartingEvent Appl

2018-3-30 14周5次課 配置Tomcat端口、虛擬主機、日誌

Tomcat16.4 配置Tomcat監聽80端口變更監聽端口:編輯server.xml,將Connector port="8080" protocol="HTTP/1.1"修改為Connector port="80" protocol="

配置Tomcat80端口、配置Tomcat的虛擬主機、Tomcat的日誌

Linux學習筆記配置Tomcat監聽80端口 配置Tomcat的虛擬主機 Tomcat的日誌 配置Tomcat監聽80端口、配置Tomcat的虛擬主機、Tomcat的日誌

Tomcat(1)介紹、jdk安裝、安裝Tomcat ? 配置Tomcat80端口

tomcat Tomcat介紹(使用yum 下載安裝的openjdk下載以後就可以使用)以下實驗用的是在官網下載程序包。Tomcat是一個中間鍵,要解析java相關的東西,需要先下載JDK下載jdk1.下載網站: http://www.oracle.com/technetwork/jav

SVN開啟端口設置開機啟動

監聽端口 啟動 port epo -- clas 倉庫 XP 設置 svnserve -d -r /home/svn/repo --listen-port=3690,svn倉庫地址,及監聽端口 vi svn_startup.sh,位置在/root下面編輯一個啟動腳本

配置Tomcat80端口, 配置Tomcat虛擬主機,Tomcat日誌

tomcat配置Tomcat監聽80端口 編輯配置文件vim /usr/local/tomcat/conf/server.xml在裏面找到8080<Connector port="8080" protocol="HTTP/1.1"connectionTimeout

配置Tomcat80端口、配置Tomcat的虛擬主機、日誌配置

項目文件 windows文件 TE ger java dir window 虛擬 記錄 配置Tomcat監聽80端口 編輯配置文件vim /usr/local/tomcat/bin/startup.sh 搜索關鍵字:Connector port ,將8080修改為80 更改

配置tomcat80端口,配置tomcat的虛擬主機

acea asset star jps ase windows 監聽 linus amp 配置tomcat監聽80端口 更改配置文件 vim /usr/local/tomcat/conf/server.xml Connector port="8080" protocol=

配置Tomcat80端口 配置Tomcat虛擬主機 Tomcat日誌

ffffff system32 term www apache manager pac drive init.d 一、配置Tomcat監聽80端口#vim /usr/local/tomcat/conf/server.xml //修改tomcat配置文件<