如何为Spring AOP方面提供超时执行?
MyAspect的记录器方法的执行时间不应超过30秒,如果不是,我会想要停止方法执行。我该怎么做?
MyAspect代码:
@Aspect
@Component
public class MyAspect {
@Autowired
private myService myService;
@AfterReturning(pointcut = "execution(* xxxxx*(..))", returning = "paramOut")
public void logger(final JoinPoint jp, Object paramOut){
Event event = (Event) paramOut;
myService.save(event);
}
}
myService接口:
public interface myService {
void save(Event event);
}
MyServiceImpl:
@Service
@Transactional
public class myServiceImpl implements myService {
@PersistenceContext
private EntityManager entityManager;
@Override
public void save(Event event) {
entityManager.persist(event);
}
}
使用java.util.concurrent.Future
检查超时。请参阅下一个示例:
@AfterReturning(pointcut = "execution(* xxxxx*(..))", returning = "paramOut")
public void logger(final JoinPoint jp, Object paramOut){
Event event = (Event) paramOut;
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Void> future = executor.submit(new Callable<Void>() {
public Void call() throws Exception {
myService.save(event);
return null;
}
});
try
{
future.get(30, TimeUnit.SECONDS);
}
catch(InterruptedException | ExecutionException | TimeoutException e){
//do something or log it
} finally {
future.cancel(true);
}
}
我有一个应用程序,我需要一个长时间运行的Selenium web驱动程序实例(我在无头模式下使用Chrome驱动程序83.0.4103.39)。基本上,应用程序不断地从队列中提取url数据,并将提取的url提供给Selenium,Selenium应该对网站进行一些分析。许多这样的网站可能会关闭,无法访问或中断,所以我设置了10秒的页面加载超时,以避免Selenium永远等待页面加载。 我这里遇到的
问题内容: 我浏览了文档,但找不到使用Spring 3.0使用@Async带注释的方法时,是否有办法为生成的异步操作指定超时。 有没有办法做到这一点?我认为这在触发异步计算时非常重要。 问题答案: 注释不提供超时,因为超时应由函数的调用者而不是函数本身决定。 我假设您是在-annotated方法上引用超时,该方法返回结果。此类方法应返回的实例,并且on 方法用于指定超时。 例如 然后
我有一个PHP Android推送通知脚本。当我运行脚本时,我在浏览器中得到以下响应“504网关超时nginx”。在常规日志概述中的服务器上,我收到以下错误: 错误: 504,消息: GET/gcm_test.phpHTTP/1.1,来源: nginx SSL访问 在我的服务器上的代理错误日志中,我收到以下错误: 2016/07/25 08:18:19[错误]23882#0:*4375从上游读取响
我在我的项目中使用了SQS。我想在将消息推送到SQS标准队列时提供超时。我所说的超时(不是可见性超时)是指,如果我的消息没有在200毫秒内推送到SQS,那么我会在某个时候重试推送它。我使用JAVA API来实现同样的目的。 最初,我试图通过请求一个可调用的任务将消息推送到SQS来处理超时,它返回给我一个未来的对象,我通过提供超时来等待。但这导致请求被发送到SQS,当消息被推送时,我的超时出现在图片
在下面的代码中,我试图理解java-8中提供的可选的概念。我创建了下面的例子来掌握orElse()背后的原理。执行代码后,defaultmethod()的主体被执行,并返回 对象y。log语句按照我的预期打印了正确的数据。 问题是,为什么defaultMethod()中的所有日志都没有打印??引入is-orElse()仅返回值,而不执行所提供方法的整个主体。? 代码: 日志:
我正在使用调用Android上的云函数,但如果需要超过10秒,则该函数返回error。当我在firebase(服务器端)上检查时,它显示功能完成(没有任何错误)。 她是我的职责, 下面是堆栈跟踪日志, 更新:Firebase控制台日志 是不是我错过了什么?我真的很感激任何帮助。