package wffz.jxmjkh.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import wffz.common.contants.ConstantProperties; import wffz.jxmjkh.service.JxMjKhTxService; import javax.annotation.PostConstruct; import java.text.ParseException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @RestController public class JxMjkhTxController { @Autowired private ScheduledExecutorService scheduledExecutorService; @Autowired private JxMjKhTxService jxMjKhTxService; @Autowired private ConstantProperties constantProperties; @PostConstruct public void init() { scheduledExecutorService.scheduleAtFixedRate(new SaveResultTask(jxMjKhTxService), 0, 1, TimeUnit.MINUTES); } @GetMapping("/saveTxData") public List<Map<String, Object>> getResult() throws ParseException { return jxMjKhTxService.selectJxMjkhTxData(constantProperties.getJsbh()); } }
时间: 2023-07-14 15:13:24 浏览: 170
这是一个使用 Spring Boot 框架开发的 RESTful 风格的接口控制器类。其中包含了以下注解:
- `@RestController`: 表示该类为一个 RESTful 接口控制器。
- `@Autowired`: 表示自动注入依赖对象。
- `@PostConstruct`: 表示在对象创建后进行初始化操作。
- `@GetMapping`: 表示该方法处理 HTTP GET 请求。
该类中包含的方法有:
- `init()`: 在对象创建后调用,启动一个定时任务,每分钟执行一次 `SaveResultTask` 类的 `run()` 方法。
- `getResult()`: 处理 HTTP GET 请求,返回经过处理后的结果列表。
相关问题
package wffz.jxmjkh.controller; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @Configuration @EnableScheduling public class ScheduleConfig { @Bean(name = "scheduledExecutorService") public ScheduledExecutorService scheduledExecutorService() { return Executors.newSingleThreadScheduledExecutor(); } } 优化修改线程池大小
在这段代码中,线程池的大小被设置为1,这意味着在任何给定时间只有一个任务可以执行。如果需要同时执行多个任务,可以增加线程池的大小。
修改线程池大小的方法取决于使用的线程池类型。在这个例子中,线程池类型是ScheduledExecutorService,可以通过调用Executors.newScheduledThreadPool()方法来创建一个基于时间调度的线程池,然后设置线程池的大小。
修改后的代码如下所示:
```
@Configuration
@EnableScheduling
public class ScheduleConfig {
@Value("${threadpool.size}")
private int threadPoolSize;
@Bean(name = "scheduledExecutorService")
public ScheduledExecutorService scheduledExecutorService() {
return Executors.newScheduledThreadPool(threadPoolSize);
}
}
```
在这个例子中,线程池的大小由配置文件中的 "threadpool.size" 属性指定。可以在应用程序的配置文件中添加这个属性,然后设置线程池的大小。例如,在 application.properties 文件中,可以添加以下行:
```
threadpool.size=10
```
这将设置线程池的大小为10。需要根据应用程序的实际需求来调整线程池的大小。
org.apache.ibatis.binding.BindingException: Mapper method 'wffz.jxmjkh.mapper.JxMjKhTxMapper.batchInsert attempted to return null from a method with a primitive return type (int). at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:93) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59) at com.sun.proxy.$Proxy81.batchInsert(Unknown Source) at wffz.jxmjkh.service.JxMjKhTxService.batchInsert(JxMjKhTxService.java:1149) at wffz.jxmjkh.controller.SaveResultTask.run(SaveResultTask.java:80) at wffz.jxmjkh.controller.JxMjkhTxController.lambda$init$0(JxMjkhTxController.java:54) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:308) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)
这是 MyBatis 绑定异常,原因是 Mapper 方法 'wffz.jxmjkh.mapper.JxMjKhTxMapper.batchInsert' 尝试返回 null 值,但是该方法有一个原始返回类型(int)。这意味着该方法必须返回一个有效的 int 值,但它返回了 null。要解决此问题,您需要在该方法中添加一个返回 int 值的语句,以确保该方法始终返回一个有效的 int 值。
阅读全文