java填坑日记~持续记录

坑1:spring的定时任务:@Scheduled

spring的定时任务默认是单线程,多个任务执行起来时间会有问题:B任务会因为A任务执行起来需要20S而被延后20S执行,需要增加定时任务配置,配置定时任务连接池大小。

SSM配置(网上看的,未测试):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        classpath:/org/springframework/beans/factory/xml/spring-beans-4.1.xsd  
        http://www.springframework.org/schema/task 
        http://www.springframework.org/schema/task/spring-task-4.1.xsd">
 
    <!-- 注解式 -->
	<task:annotation-driven executor="taskExecutor" proxy-target-class="true" scheduler="scheduler" />
 
    <!-- 配置处理定时任务的线程池 -->
    <task:scheduler id="myScheduler" pool-size="5" />
    <!--  配置处理 异步定时任务的  线程池 -->
	<beans:bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <!-- 核心线程数 -->
        <beans:property name="corePoolSize" value="5" />
        <!-- 最大线程数 -->
        <beans:property name="maxPoolSize" value="10" />
        <!-- 队列最大长度 -->
        <beans:property name="queueCapacity" value="25" />
        <!-- 线程池维护线程所允许的空闲时间,默认为60s -->
        <beans:property name="keepAliveSeconds" value="300" />
         <!-- 线程池对拒绝任务(无线程可用)的处理策略 ThreadPoolExecutor.CallerRunsPolicy策略 ,调用者的线程会执行该任务,如果执行器已关闭,则丢弃.  -->
        <beans:property name="rejectedExecutionHandler">
            <beans:bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" />
        </beans:property>
</beans:bean>
</beans>


springboot配置:

@Configuration
public class ScheduleConfig implements SchedulingConfigurer{
    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        //参数传入一个size为5的线程池
        scheduledTaskRegistrar.setScheduler(Executors.newScheduledThreadPool(5));
    }
}

坑2:工具类中使用@Autowired注入

一个类,类中所有的方法都是static的,当在此类注入时应改变注入方式,否则注入的对象为null
	@Autowired
	private RTDServiceMapper rtdService;
	
	private static RTDServiceMapper rtdServiceMapper;
	
	@PostConstruct
	public void init() {
		rtdServiceMapper = rtdService;//赋值
	}

猜你喜欢

转载自blog.csdn.net/lmq2582609/article/details/88291564