sprintBoot框架,需要做一个定时器,每过100秒就查询一次数据库,然后进行一系列逻辑
我用了@Scheduled注解,测试环境一切正常,可是一部署到阿里云tomcat里,启动就报内存泄漏。
/**
* 数据转化到运行表 100秒一次
*/
@Override
@Transactional(rollbackFor = Exception.class)
@Scheduled(fixedRate = 1000 * 100)
public void toRun() {
System.out.println("原始数据转化开始·····"+DateUtil.now());
List<MachineRawDataDto> list = machineRawDataMapping.toDto(baseMapper.findByNoIsDeal());
synchronized (this){
for (MachineRawDataDto dto : list) {
TenantRequestContext.setTenantLocal(dto.getTenantId());
MachineDto machineDto = machineService.findOneByFields("code",dto.getMachineCode());
MachineRunDto runDto = machineRunService.findOneByFields("machine_id",machineDto.getId(),"is_deal","0");
//没有找到数据或者该数据已经有结束时间,则新建一条数据
if(runDto==null || runDto.getEndTime()!=null){
runDto = new MachineRunDto();
runDto.setBeginTime(dto.getReceiveTime());
runDto.setMachineId(machineDto.getId());
}
if(RawKeyEnum.产量.equals(dto.getKey())){
if(Arith.compare(runDto.getProductNumber(),dto.getValue())==0){
runDto.setDownCount((int)Arith.addMore(runDto.getDownCount(), 1));//产量不变,则计数器加1
}else{
runDto.setDownCount(0);//产量变化,则计数器归零
}
runDto.setProductNumber(dto.getValue());
}else if(RawKeyEnum.速度.equals(dto.getKey())){
runDto.setProductSpeed(dto.getValue());
}
machineRunService.create(runDto);
dto.setIsDeal(true);
baseMapper.updateById(machineRawDataMapping.toEntity(dto));
}
}
System.out.println("·····原始数据转化结束");
}
20-Jun-2022 18:41:29.380 警告 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[device]似乎启动了一个名为[quartzScheduler_Worker-1]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
java.lang.Object.wait(Native Method)
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)]
报错截全一点吧,感觉引发这个报错的是其他底层报错,比如:数据库连接失败导致定时任务执行报错,线程被异常中止。
日志发成评论也是可以的。报错是类找不到com.device.util.SpringContextHolder
。
如果你咬定不是这个报错的问题,那只能说你挺自信。
你这是多少数据呀,一次全部查出来处理?还放一个事务里
20-Jun-2022 18:41:29.379 警告 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[device]似乎启动了一个名为[mysql-cj-abandoned-connection-cleanup]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
java.lang.Object.wait(Native Method)
java.lang.ref.ReferenceQueue.remove(Unknown Source)
com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:85)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)]
20-Jun-2022 18:41:29.380 警告 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[device]似乎启动了一个名为[OkHttp ConnectionPool]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Unknown Source)
okhttp3.ConnectionPool.lambda$new$0(ConnectionPool.java:66)
okhttp3.ConnectionPool$$Lambda$417/1240092510.run(Unknown Source)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)]
20-Jun-2022 18:41:29.380 警告 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[device]似乎启动了一个名为[Okio Watchdog]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Unknown Source)
okio.AsyncTimeout.awaitTimeout(AsyncTimeout.java:362)
okio.AsyncTimeout$Watchdog.run(AsyncTimeout.java:313)]
20-Jun-2022 18:41:29.380 警告 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[device]似乎启动了一个名为[quartzScheduler_Worker-1]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
java.lang.Object.wait(Native Method)
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)]
20-Jun-2022 18:41:29.382 警告 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[device]似乎启动了一个名为[quartzScheduler_Worker-2]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
java.lang.Object.wait(Native Method)
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)]
20-Jun-2022 18:41:29.383 警告 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[device]似乎启动了一个名为[quartzScheduler_Worker-3]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
java.lang.Object.wait(Native Method)
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)]
20-Jun-2022 18:41:29.384 警告 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[device]似乎启动了一个名为[quartzScheduler_Worker-4]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
java.lang.Object.wait(Native Method)
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)]
20-Jun-2022 18:41:29.384 警告 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[device]似乎启动了一个名为[quartzScheduler_Worker-5]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
java.lang.Object.wait(Native Method)
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)]
20-Jun-2022 18:41:29.384 警告 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[device]似乎启动了一个名为[quartzScheduler_Worker-6]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
java.lang.Object.wait(Native Method)
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)]
20-Jun-2022 18:41:29.384 警告 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[device]似乎启动了一个名为[quartzScheduler_Worker-7]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
java.lang.Object.wait(Native Method)
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)]
20-Jun-2022 18:41:29.384 警告 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[device]似乎启动了一个名为[quartzScheduler_Worker-8]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
java.lang.Object.wait(Native Method)
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)]
20-Jun-2022 18:41:29.384 警告 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[device]似乎启动了一个名为[quartzScheduler_Worker-9]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
java.lang.Object.wait(Native Method)
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)]
20-Jun-2022 18:41:29.385 警告 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[device]似乎启动了一个名为[quartzScheduler_Worker-10]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
java.lang.Object.wait(Native Method)
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:568)]
20-Jun-2022 18:41:29.395 信息 [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployWAR 正在部署web应用程序存档文件[C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps\device.war]
20-Jun-2022 18:41:29.432 信息 [mysql-cj-abandoned-connection-cleanup] org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading 非法访问:此Web应用程序实例已停止。无法加载[]。为了调试以及终止导致非法访问的线程,将抛出以下堆栈跟踪。
java.lang.IllegalStateException: 非法访问:此Web应用程序实例已停止。无法加载[]。为了调试以及终止导致非法访问的线程,将抛出以下堆栈跟踪。
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1392)
at org.apache.catalina.loader.WebappClassLoaderBase.getResource(WebappClassLoaderBase.java:1045)
at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.checkThreadContextClassLoader(AbandonedConnectionCleanupThread.java:117)
at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:84)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
20-Jun-2022 18:41:32.656 警告 [localhost-startStop-2] org.apache.tomcat.util.descriptor.web.WebXml.setVersion 未知版本字符串 [4.0]。将使用默认版本。
20-Jun-2022 18:41:38.117 信息 [localhost-startStop-2] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
20-Jun-2022 18:41:40.098 严重 [localhost-startStop-2] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: 无法启动组件[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/device]]
at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:691)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1015)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1895)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.device.DevApplication]; nested exception is java.lang.IllegalStateException: Failed to introspect annotated methods on class com.device.DevApplication
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:181)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:315)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:232)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:705)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:157)
at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:137)
at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:91)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:171)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5157)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
... 10 more
Caused by: java.lang.IllegalStateException: Failed to introspect annotated methods on class com.device.DevApplication
at org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:169)
at org.springframework.context.annotation.ConfigurationClassParser.retrieveBeanMethodMetadata(ConfigurationClassParser.java:392)
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:317)
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:242)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:199)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:167)
... 26 more
Caused by: java.lang.NoClassDefFoundError: com/device/util/SpringContextHolder
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getDeclaredMethods(Unknown Source)
at org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:158)
... 31 more
Caused by: java.lang.ClassNotFoundException: com.device.util.SpringContextHolder
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1372)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1195)
... 35 more
20-Jun-2022 18:41:40.102 严重 [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployWAR 部署 Web 应用程序 archive [C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps\device.war] 时出错
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: 无法启动组件[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/device]]
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:747)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:691)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1015)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1895)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
20-Jun-2022 18:41:40.102 信息 [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployWAR web应用程序存档文件[C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps\device.war]的部署已在[10,707]ms内完成
20-Jun-2022 18:41:40.103 信息 [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps\dev_device]
20-Jun-2022 18:41:40.194 警告 [localhost-startStop-2] org.apache.tomcat.util.descriptor.web.WebXml.setVersion 未知版本字符串 [4.0]。将使用默认版本。
20-Jun-2022 18:41:41.969 信息 [Thread-9] org.apache.coyote.AbstractProtocol.pause 暂停ProtocolHandler["http-nio-8080"]
20-Jun-2022 18:41:42.022 信息 [Thread-9] org.apache.catalina.core.StandardService.stopInternal 正在停止服务[Catalina]
20-Jun-2022 18:41:42.025 严重 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.startup.HostConfig.deployDirectories 等待目录的多线程部署完成时出错
java.lang.InterruptedException
at java.util.concurrent.FutureTask.awaitDone(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1098)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:475)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1652)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1159)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1385)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1353)
at java.lang.Thread.run(Unknown Source)
20-Jun-2022 18:41:43.805 信息 [localhost-startStop-2] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
20-Jun-2022 18:41:56.417 信息 [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps\dev_device]的部署已在[16,313]毫秒内完成
20-Jun-2022 18:41:56.573 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc Web应用程序 [ipm-system-4.0] 注册了JDBC驱动程序 [net.sf.log4jdbc.sql.jdbcapi.DriverSpy],但在Web应用程序停止时无法注销它。 为防止内存泄漏,JDBC驱动程序已被强制取消注册。
20-Jun-2022 18:41:56.573 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc Web应用程序 [ipm-system-4.0] 注册了JDBC驱动程序 [com.mysql.cj.jdbc.Driver],但在Web应用程序停止时无法注销它。 为防止内存泄漏,JDBC驱动程序已被强制取消注册。
20-Jun-2022 18:41:56.575 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[ipm-system-4.0]似乎启动了一个名为[logback-2]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
java.lang.ClassNotFoundException: com.device.util.SpringContextHolde
这是啥玩意,这是你自己的代码?别又是那种本地jar吧
jdbc驱动包换成
com.mysql.cj.jdbc.Driver