以下是我的方面:
@Configurable
@Aspect
public class TimingAspect {
@Autowired
private HttpServletRequest httpServletRequest;
// Generic performance logger for any mothod
private Object logPerfomanceInfo(ProceedingJoinPoint joinPoint, String remoteAddress) {
StringBuilder tag = new StringBuilder();
if (joinPoint.getTarget() != null) {
tag.append(joinPoint.getTarget().getClass().getName());
tag.append(".");
}
tag.append(joinPoint.getSignature().getName());
StopWatch stopWatch = new StopWatch(tag.toString());
Object result = joinPoint.proceed(); // continue on the intercepted method
stopWatch.stop();
PerformanceUtils.logInPerf4jFormat(stopWatch.getStartTime(), stopWatch.getElapsedTime(), stopWatch.getTag(), stopWatch.getMessage(), remoteAddress);
return result;
}
@Around("execution(* $$$.$$$.$$$.api.controller.*.*(..))")
public Object logAroundApis(ProceedingJoinPoint joinPoint) throws Throwable {
String remoteAddress = null;
if (httpServletRequest != null) {
remoteAddress = httpServletRequest.getRemoteAddr();
}
return logPerfomanceInfo(joinPoint, remoteAddress);
}
@Around("execution(* $$$.$$$.$$$.$$$.$$$.$$$.*(..))")
public Object logAroundService(ProceedingJoinPoint joinPoint) throws Throwable {
String remoteAddress = null;
if (httpServletRequest != null) {
remoteAddress = httpServletRequest.getRemoteAddr();
}
return logPerfomanceInfo(joinPoint, remoteAddress);
}
您不应该在您的方面自带HttpServletRequest
,因为这会将您的方面绑定为只能为从正在执行的HttpServletRequest
中调用的类运行。
在需要请求时,可以使用RequestContextHolder
来获取请求。
private String getRemoteAddress() {
RequestAttributes attribs = RequestContextHolder.getRequestAttributes();
if (attribs instanceof NativeWebRequest) {
HttpServletRequest request = (HttpServletRequest) ((NativeWebRequest) attribs).getNativeRequest();
return request.getRemoteAddr();
}
return null;
}
为了在请求、会话和全局会话级别支持bean的范围(Web范围bean),在定义bean之前需要进行一些次要的初始配置。 我在中添加了以下内容,如文档所示: 2.将bean限定为依赖项 org.springframework.beans.factory.BeanCreationException:创建名为“ScopedTarget.ReportBuilder”的bean时出错:当前线程的作用域“se
以下是我从IntelliJ获得的代码: 当我在spark-shell中运行它时,它正在运行文件:/opt/spark/bin/spark-shell--jars/home/tigergraph/ecosys/tools/etl/tg-jdbc-driver/tg-jdbc-driver-1.2.jar 我怎么才能修好?
问题内容: 我有一个控制器,希望每个会话都唯一。根据spring文档,实现有两个细节: 1.初始Web配置 为了支持在请求,会话和全局会话级别(Web范围的Bean)的Bean范围界定,在定义Bean之前,需要一些较小的初始配置。 web.xml如文档所示,我已经添加了以下内容: 2.范围豆作为依赖项 如果要将(例如)HTTP请求范围的bean注入另一个bean,则必须注入AOP代理来代替范围的b
所以我有3个不同的类,每个都有一个扫描仪。在main方法中,我循环遍历这些类,并为每个类输入几次。问题是当我关闭扫描仪(scanner.close();)时,我只能迭代一次,执行的第一个类,然后我得到这个错误:线程“main”中的异常java.util.NoSuchElementException:找不到行。当我不关闭扫描仪时,一切都很好,但我不想有内存泄漏。如果发布代码可以帮助您更好地理解我的问
我有一个关于多线程和StringProperty绑定的问题。 我有一个类CacheManager,它包含一个线程,可以根据服务器上的更改更新缓存。现在,我想用文本和进度百分比(JavaFX中的标签和进度条)通知用户。为此,我使用公共静态的DoubleProperty和StringProperty,它们是在CacheManager类中定义的。我只是这样装订: 现在,在Updater线程中,我更新了这
问题内容: 我有一个关于多线程和StringProperty绑定的问题。 我有一个类,其中包含,该类使用服务器上的更改更新缓存。现在,我想用文本和进度百分比(在JavaFX 中为和)通知用户。我使用公共静态和对于这一点,这是在定义类。我只是这样绑定它: 现在,在Updater线程中,我更新了这些。使用此方法效果很好,并且可以完美地显示进度。但是,使用状态(这是的文本)更新会引发错误: 现在,我的问