diff --git a/null b/null new file mode 100644 index 0000000..ce3e5ba --- /dev/null +++ b/null @@ -0,0 +1 @@ +Active code page: 65001 diff --git a/src/main/java/com/ecep/contract/manager/SpringApp.java b/src/main/java/com/ecep/contract/manager/SpringApp.java index 1c619a5..6ec298f 100644 --- a/src/main/java/com/ecep/contract/manager/SpringApp.java +++ b/src/main/java/com/ecep/contract/manager/SpringApp.java @@ -1,18 +1,16 @@ package com.ecep.contract.manager; -import com.ecep.contract.manager.cloud.CloudRepositoriesConfig; -import com.ecep.contract.manager.ds.DsRepositoriesConfig; -import com.ecep.contract.manager.ui.MessageHolder; -import com.ecep.contract.manager.util.MyDateTimeUtils; -import com.ecep.contract.manager.util.UITools; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; +import java.time.Duration; +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.Locale; +import java.util.Properties; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ScheduledExecutorService; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; @@ -38,17 +36,21 @@ import org.springframework.core.metrics.StartupStep; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; -import java.time.*; -import java.time.format.DateTimeFormatter; -import java.util.List; -import java.util.Locale; -import java.util.Properties; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executors; -import java.util.concurrent.FutureTask; -import java.util.concurrent.ScheduledExecutorService; +import com.ecep.contract.manager.cloud.CloudRepositoriesConfig; +import com.ecep.contract.manager.ds.DsRepositoriesConfig; +import com.ecep.contract.manager.ui.MessageHolder; +import com.ecep.contract.manager.util.MyDateTimeUtils; +import com.ecep.contract.manager.util.UITools; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; -@SpringBootApplication +@SpringBootApplication(exclude = { org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration.class }) @EnableScheduling @EnableAsync @EnableCaching @@ -97,7 +99,6 @@ public class SpringApp { } }); - startup.start(""); context = application.run(); logger.debug("SpringApp.launch application.run()."); @@ -178,7 +179,8 @@ public class SpringApp { } @Override - public void environmentPrepared(ConfigurableBootstrapContext bootstrapContext, ConfigurableEnvironment environment) { + public void environmentPrepared(ConfigurableBootstrapContext bootstrapContext, + ConfigurableEnvironment environment) { logger.debug("Desktop.environmentPrepared"); debug("初始化 Environment 中,请稍后..."); } @@ -195,7 +197,6 @@ public class SpringApp { debug("Spring Application Context 初始化完毕,请稍后..."); } - @Override public void started(ConfigurableApplicationContext context, Duration timeTaken) { logger.debug("Desktop.started"); @@ -231,7 +232,7 @@ public class SpringApp { @Bean public CacheManager cacheManager() { -// return new ConcurrentMapCacheManager("myCache"); + // return new ConcurrentMapCacheManager("myCache"); CaffeineCacheManager cacheManager = new CaffeineCacheManager(); cacheManager.setAsyncCacheMode(true); return cacheManager; @@ -242,10 +243,12 @@ public class SpringApp { ObjectMapper objectMapper = new ObjectMapper(); JavaTimeModule javaTimeModule = new JavaTimeModule(); javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ISO_LOCAL_DATE)); - javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(MyDateTimeUtils.DEFAULT_DATETIME_FORMAT_PATTERN))); + javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer( + DateTimeFormatter.ofPattern(MyDateTimeUtils.DEFAULT_DATETIME_FORMAT_PATTERN))); javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ISO_LOCAL_DATE)); - javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(MyDateTimeUtils.DEFAULT_DATETIME_FORMAT_PATTERN))); + javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer( + DateTimeFormatter.ofPattern(MyDateTimeUtils.DEFAULT_DATETIME_FORMAT_PATTERN))); javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ISO_LOCAL_TIME)); objectMapper.registerModule(javaTimeModule); return objectMapper; @@ -253,7 +256,7 @@ public class SpringApp { @Bean public ScheduledExecutorService scheduledExecutorService() { - return Executors.newScheduledThreadPool(3); + return Desktop.instance.getExecutorService(); } } diff --git a/src/main/java/com/ecep/contract/manager/cloud/old/OldVersionService.java b/src/main/java/com/ecep/contract/manager/cloud/old/OldVersionService.java index 85d459b..fc91363 100644 --- a/src/main/java/com/ecep/contract/manager/cloud/old/OldVersionService.java +++ b/src/main/java/com/ecep/contract/manager/cloud/old/OldVersionService.java @@ -1,5 +1,6 @@ package com.ecep.contract.manager.cloud.old; +import com.ecep.contract.manager.Desktop; import com.ecep.contract.manager.SpringApp; import com.ecep.contract.manager.cloud.rk.CloudRk; import com.ecep.contract.manager.cloud.rk.CloudRkService; @@ -81,8 +82,6 @@ public class OldVersionService { @Autowired private CloudTycService cloudTycService; @Autowired - private ScheduledExecutorService scheduledExecutorService; - @Autowired private CompanyContactRepository companyContactRepository; @Autowired private CompanyCustomerRepository companyCustomerRepository; @@ -210,7 +209,8 @@ public class OldVersionService { */ public void scheduledTasks(TaskProgressView> taskProgressView) { // 15分钟运行一次合同合同任务 - scheduledExecutorService.scheduleAtFixedRate(() -> { + ScheduledExecutorService executorService = Desktop.instance.getExecutorService(); + executorService.scheduleAtFixedRate(() -> { if (logger.isDebugEnabled()) { logger.debug("createSyncTask"); } @@ -220,16 +220,9 @@ public class OldVersionService { return; } - Task vendorTask = new OldVersionSyncVendorTask(); - Task customerTask = new OldVersionSyncCustomerTask(); - - scheduledExecutorService.schedule(() -> { - vendorTask.run(); - customerTask.run(); - }, 5, TimeUnit.SECONDS); - Platform.runLater(() -> { - taskProgressView.getTasks().addAll(vendorTask, customerTask); - }); + Desktop.instance.getTaskMonitorCenter().registerTask(new OldVersionSyncVendorTask()).schedule(5, TimeUnit.SECONDS); + Desktop.instance.getTaskMonitorCenter().registerTask(new OldVersionSyncCustomerTask()).schedule(5, TimeUnit.SECONDS); + }, 3, TimeUnit.DAYS.toSeconds(1), TimeUnit.SECONDS); } diff --git a/src/main/java/com/ecep/contract/manager/cloud/old/OldVersionSyncCustomerTask.java b/src/main/java/com/ecep/contract/manager/cloud/old/OldVersionSyncCustomerTask.java index 7bda0c8..28cb27b 100644 --- a/src/main/java/com/ecep/contract/manager/cloud/old/OldVersionSyncCustomerTask.java +++ b/src/main/java/com/ecep/contract/manager/cloud/old/OldVersionSyncCustomerTask.java @@ -1,13 +1,5 @@ package com.ecep.contract.manager.cloud.old; -import com.ecep.contract.manager.SpringApp; -import com.ecep.contract.manager.ds.company.service.CompanyService; -import com.ecep.contract.manager.ds.company.model.Company; -import com.ecep.contract.manager.ds.contract.model.Contract; -import javafx.concurrent.Task; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.File; import java.util.Arrays; import java.util.List; @@ -16,10 +8,20 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import java.util.stream.Stream; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.ecep.contract.manager.SpringApp; +import com.ecep.contract.manager.ds.company.model.Company; +import com.ecep.contract.manager.ds.company.service.CompanyService; +import com.ecep.contract.manager.ds.contract.model.Contract; +import com.ecep.contract.manager.ui.MessageHolder; +import com.ecep.contract.manager.ui.Tasker; + /** * */ -public class OldVersionSyncCustomerTask extends Task { +public class OldVersionSyncCustomerTask extends Tasker { private static final Logger logger = LoggerFactory.getLogger(OldVersionSyncCustomerTask.class); private final OldVersionService service = SpringApp.getBean(OldVersionService.class); @@ -40,7 +42,7 @@ public class OldVersionSyncCustomerTask extends Task { } @Override - protected Object call() throws Exception { + protected Object execute(MessageHolder holder) throws Exception { updateTitle("老版本-同步客户数据"); basePath = companyService.getCustomerBasePath(); List runnable = Arrays.asList(this::loadOldNames, this::loadContacts, this::syncCustomers, this::syncContracts); @@ -122,4 +124,5 @@ public class OldVersionSyncCustomerTask extends Task { } } + } diff --git a/src/main/java/com/ecep/contract/manager/cloud/old/OldVersionSyncVendorTask.java b/src/main/java/com/ecep/contract/manager/cloud/old/OldVersionSyncVendorTask.java index 14346f4..3bfca43 100644 --- a/src/main/java/com/ecep/contract/manager/cloud/old/OldVersionSyncVendorTask.java +++ b/src/main/java/com/ecep/contract/manager/cloud/old/OldVersionSyncVendorTask.java @@ -1,13 +1,5 @@ package com.ecep.contract.manager.cloud.old; -import com.ecep.contract.manager.SpringApp; -import com.ecep.contract.manager.ds.company.service.CompanyService; -import com.ecep.contract.manager.ds.company.model.Company; -import com.ecep.contract.manager.ds.contract.model.Contract; -import javafx.concurrent.Task; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.File; import java.util.Arrays; import java.util.List; @@ -16,7 +8,17 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import java.util.stream.Stream; -public class OldVersionSyncVendorTask extends Task { +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.ecep.contract.manager.SpringApp; +import com.ecep.contract.manager.ds.company.model.Company; +import com.ecep.contract.manager.ds.company.service.CompanyService; +import com.ecep.contract.manager.ds.contract.model.Contract; +import com.ecep.contract.manager.ui.MessageHolder; +import com.ecep.contract.manager.ui.Tasker; + +public class OldVersionSyncVendorTask extends Tasker { private static final Logger logger = LoggerFactory.getLogger(OldVersionSyncVendorTask.class); private final OldVersionService service = SpringApp.getBean(OldVersionService.class); @@ -35,12 +37,11 @@ public class OldVersionSyncVendorTask extends Task { super.updateTitle(titlePrefix + title); } - @Override - protected Object call() throws Exception { + protected Object execute(MessageHolder holder) throws Exception { basePath = companyService.getVendorBasePath(); - - List runnable = Arrays.asList(this::loadOldNames, this::loadContacts, this::syncVendors, this::syncContracts); + List runnable = Arrays.asList(this::loadOldNames, this::loadContacts, this::syncVendors, + this::syncContracts); for (int i = 0; i < runnable.size(); i++) { titlePrefix = "老版本-同步供应商数据-" + (i + 1) + "/" + runnable.size() + "-"; try { @@ -116,4 +117,5 @@ public class OldVersionSyncVendorTask extends Task { }); } } + } diff --git a/src/main/java/com/ecep/contract/manager/cloud/rk/CloudRkService.java b/src/main/java/com/ecep/contract/manager/cloud/rk/CloudRkService.java index 4f76cda..eb8184d 100644 --- a/src/main/java/com/ecep/contract/manager/cloud/rk/CloudRkService.java +++ b/src/main/java/com/ecep/contract/manager/cloud/rk/CloudRkService.java @@ -1,6 +1,6 @@ package com.ecep.contract.manager.cloud.rk; - +import com.ecep.contract.manager.Desktop; import com.ecep.contract.manager.cloud.CloudInfo; import com.ecep.contract.manager.ds.company.BlackReasonType; import com.ecep.contract.manager.ds.company.CompanyFileUtils; @@ -88,7 +88,6 @@ public class CloudRkService implements ViewModelService companyNames = new ArrayList<>(); companyNames.add(company.getName()); // fixed 平台API使用企业名称,可能记录的是曾用名 @@ -172,12 +167,14 @@ public class CloudRkService implements ViewModelService dbReasons, - List reasonList, ObjectMapper objectMapper - ) throws JsonMappingException { + List reasonList, ObjectMapper objectMapper) throws JsonMappingException { ObjectNode object = (ObjectNode) reason; String key = "rk-" + object.remove("id").asText(); - CompanyBlackReason cbr = dbReasons.stream().filter(r -> r.getKey().equals(key)).findAny().orElseGet(CompanyBlackReason::new); + CompanyBlackReason cbr = dbReasons.stream().filter(r -> r.getKey().equals(key)).findAny() + .orElseGet(CompanyBlackReason::new); objectMapper.updateValue(cbr, reason); cbr.setCompany(company); cbr.setType(type); @@ -241,8 +238,7 @@ public class CloudRkService implements ViewModelService hasCouldIdList = list.stream().filter(v -> StringUtils.hasText(v.getCloudId())).collect(Collectors.toList()); + List hasCouldIdList = list.stream().filter(v -> StringUtils.hasText(v.getCloudId())) + .collect(Collectors.toList()); // 没有匹配到一条时 if (hasCouldIdList.isEmpty()) { // 保留第一条,其他删除 @@ -299,7 +296,8 @@ public class CloudRkService implements ViewModelService hasLatestList = hasCouldIdList.stream().filter(v -> v.getCloudLatest() != null).collect(Collectors.toList()); + List hasLatestList = hasCouldIdList.stream().filter(v -> v.getCloudLatest() != null) + .collect(Collectors.toList()); // 没有匹配到一条时 if (hasLatestList.isEmpty()) { // 保留第一条,其他删除 @@ -338,7 +336,6 @@ public class CloudRkService implements ViewModelService findNeedUpdate() { Instant now = Instant.now(); long elapse = getSyncElapse(); @@ -368,26 +365,14 @@ public class CloudRkService implements ViewModelService> taskProgressView) { - AtomicReference reference = new AtomicReference<>(); - Runnable runnable = () -> { - CloudRkSyncTask task = new CloudRkSyncTask(); - Platform.runLater(() -> taskProgressView.getTasks().add(task)); - // 延迟10秒 - task.delay(10, CompletableFuture.delayedExecutor(1, TimeUnit.SECONDS, scheduledExecutorService)) - .thenRun(() -> { - try { - task.run(); - } catch (Exception e) { - logger.error(e.getMessage(), e); - } - // 30 分钟后再次运行 - scheduledExecutorService.schedule(reference.get(), 30, TimeUnit.MINUTES); - } - ); - }; - reference.set(runnable); - // 第一次延时启动 - scheduledExecutorService.schedule(runnable, 1, TimeUnit.MINUTES); + ScheduledExecutorService executorService = Desktop.instance.getExecutorService(); + // 第一次延时1分钟启动 + executorService.schedule(() -> { + // 定时 30分钟 运行一次 + executorService.scheduleAtFixedRate(() -> { + Desktop.instance.getTaskMonitorCenter().registerTask(new CloudRkSyncTask()).submit(); + }, 0, 30, TimeUnit.MINUTES); + }, 1, TimeUnit.MINUTES); } @CacheEvict @@ -401,12 +386,10 @@ public class CloudRkService implements ViewModelService list = cloudRKRepository.findAllByCompanyId(from.getId()); for (CloudRk item : list) { diff --git a/src/main/java/com/ecep/contract/manager/cloud/u8/YongYouU8Service.java b/src/main/java/com/ecep/contract/manager/cloud/u8/YongYouU8Service.java index e8a1f46..26bcf00 100644 --- a/src/main/java/com/ecep/contract/manager/cloud/u8/YongYouU8Service.java +++ b/src/main/java/com/ecep/contract/manager/cloud/u8/YongYouU8Service.java @@ -118,20 +118,20 @@ public class YongYouU8Service implements ViewModelService { ContractSyncTask task = new ContractSyncTask(); MonitoredTask registerTask = Desktop.instance.getTaskMonitorCenter().registerTask(task); - executorService.schedule(registerTask, 5, TimeUnit.SECONDS); + registerTask.schedule(5, TimeUnit.SECONDS); }, 3, TimeUnit.MINUTES.toSeconds(15), TimeUnit.SECONDS); executorService.scheduleAtFixedRate(() -> { // 1小时运行一次同步供应商任务 VendorSyncTask vendorTask = new VendorSyncTask(); MonitoredTask registerVendorTask = Desktop.instance.getTaskMonitorCenter().registerTask(vendorTask); - executorService.schedule(registerVendorTask, 60, TimeUnit.SECONDS); + registerVendorTask.schedule(60, TimeUnit.SECONDS); // 1小时运行一次同步客户任务 CustomerSyncTask customerTask = new CustomerSyncTask(); MonitoredTask registerCustomerTask = Desktop.instance.getTaskMonitorCenter() .registerTask(customerTask); - executorService.schedule(registerCustomerTask, 60, TimeUnit.SECONDS); + registerCustomerTask.schedule(60, TimeUnit.SECONDS); }, 3, TimeUnit.HOURS.toSeconds(1), TimeUnit.SECONDS); diff --git a/src/main/java/com/ecep/contract/manager/ds/DsRepositoriesConfig.java b/src/main/java/com/ecep/contract/manager/ds/DsRepositoriesConfig.java index aa67299..c22e5a9 100644 --- a/src/main/java/com/ecep/contract/manager/ds/DsRepositoriesConfig.java +++ b/src/main/java/com/ecep/contract/manager/ds/DsRepositoriesConfig.java @@ -17,6 +17,8 @@ import javax.sql.DataSource; import static com.ecep.contract.manager.AppV2.*; +import java.util.Map; + @Configuration @EnableJpaRepositories(bootstrapMode = BootstrapMode.LAZY) public class DsRepositoriesConfig { @@ -41,7 +43,6 @@ public class DsRepositoriesConfig { logger.debug("db server url:{},user:{}", url, username); } - return DataSourceBuilder.create() .type(HikariDataSource.class) .url(url) diff --git a/src/main/java/com/ecep/contract/manager/ui/task/MonitoredTask.java b/src/main/java/com/ecep/contract/manager/ui/task/MonitoredTask.java index 3b5ac6e..1b6b855 100644 --- a/src/main/java/com/ecep/contract/manager/ui/task/MonitoredTask.java +++ b/src/main/java/com/ecep/contract/manager/ui/task/MonitoredTask.java @@ -1,5 +1,6 @@ package com.ecep.contract.manager.ui.task; +import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -46,7 +47,7 @@ public class MonitoredTask implements Runnable { private final ObjectProperty exception = new SimpleObjectProperty<>(this, "exception"); private final ObjectProperty succeededProperty = new SimpleObjectProperty<>(); private final ObjectProperty failedProperty = new SimpleObjectProperty<>(); - private final ObjectProperty cancelledProperty = new SimpleObjectProperty<>(); + private final ObjectProperty cancelledHandler = new SimpleObjectProperty<>(); private final AtomicBoolean timeoutHandled = new AtomicBoolean(false); public MonitoredTask(Tasker delegate, String taskId) { @@ -85,15 +86,16 @@ public class MonitoredTask implements Runnable { private void stateChanged(ObservableValue observable, Worker.State oldValue, Worker.State newValue) { switch (newValue) { - case RUNNING: + case RUNNING: { + if (stateProperty().get() != TaskStatus.RUNNING) { + if (logger.isWarnEnabled()) { + logger.warn("任务{} 的 delegate 状态从 {} 变更为 {} 时, monitor的状态 {} 不是 RUNNING", taskId, oldValue, + newValue, stateProperty().get()); + } + } stateProperty().set(TaskStatus.RUNNING); break; - case SUCCEEDED: - stateProperty().set(TaskStatus.SUCCEEDED); - break; - case FAILED: - stateProperty().set(TaskStatus.FAILED); - break; + } case CANCELLED: stateProperty().set(TaskStatus.CANCELLED); cancelledProperty().get().run(); @@ -103,6 +105,40 @@ public class MonitoredTask implements Runnable { } } + @Override + public void run() { + if (logger.isDebugEnabled()) { + logger.debug("任务 {} 开始执行", taskId); + } + stateProperty().set(TaskStatus.RUNNING); + try { + call(); + if (logger.isDebugEnabled()) { + logger.debug("任务 {} 执行完成", taskId); + } + } catch (Throwable e) { + exceptionProperty().set(e); + if (logger.isDebugEnabled()) { + logger.debug("任务 {} 执行异常", taskId, e); + } + } finally { + try { + if (exceptionProperty().get() == null) { + stateProperty().set(TaskStatus.SUCCEEDED); + succeededProperty().get().run(); + } else { + stateProperty().set(TaskStatus.FAILED); + failedProperty().get().run(); + } + } catch (Exception e) { + if (logger.isDebugEnabled()) { + logger.debug("任务 {} 回调执行异常", taskId, e); + } + } + } + + } + public StringProperty titleProperty() { return title; } @@ -136,41 +172,7 @@ public class MonitoredTask implements Runnable { } public ObjectProperty cancelledProperty() { - return cancelledProperty; - } - - @Override - public void run() { - if (logger.isDebugEnabled()) { - logger.debug("任务 {} 开始执行", taskId); - } - stateProperty().set(TaskStatus.SCHEDULED); - try { - call(); - if (logger.isDebugEnabled()) { - logger.debug("任务 {} 执行完成", taskId); - } - - } catch (Throwable e) { - exceptionProperty().set(e); - if (logger.isDebugEnabled()) { - logger.debug("任务 {} 执行异常", taskId, e); - } - } finally { - try { - if (exceptionProperty().get() == null) { - stateProperty().set(TaskStatus.SUCCEEDED); - succeededProperty().get().run(); - } else { - failedProperty().get().run(); - } - } catch (Exception e) { - if (logger.isDebugEnabled()) { - logger.debug("任务 {} 回调执行异常", taskId, e); - } - } - } - + return cancelledHandler; } protected T call() throws Exception { @@ -194,7 +196,7 @@ public class MonitoredTask implements Runnable { * 设置超时监控 */ private void setupTimeoutMonitor() { - timeoutExecutor = Desktop.instance.getExecutorService().schedule(() -> { + timeoutExecutor = getExecutorService().schedule(() -> { if (isRunning() && timeoutHandled.compareAndSet(false, true)) { updateMessage("任务执行超时,正在取消..."); stateProperty().set(TaskStatus.TIMED_OUT); @@ -203,6 +205,16 @@ public class MonitoredTask implements Runnable { }, timeoutSeconds, TimeUnit.SECONDS); } + public void submit() { + getExecutorService().submit(this); + } + + public ScheduledFuture schedule(long delay, TimeUnit unit) { + ScheduledFuture schedule = getExecutorService().schedule(this, delay, unit); + stateProperty().set(TaskStatus.DELAYED); + return schedule; + } + private void updateMessage(String string) { messageProperty().set(string); } @@ -247,10 +259,15 @@ public class MonitoredTask implements Runnable { } public void setOnCancelled(Runnable value) { - cancelledProperty.set(value); + cancelledHandler.set(value); } public void setOnRunning(EventHandler value) { delegate.setOnRunning(value); } + + ScheduledExecutorService getExecutorService() { + return Desktop.instance.getExecutorService(); + } + } \ No newline at end of file diff --git a/src/main/java/com/ecep/contract/manager/ui/task/TaskMonitorViewController.java b/src/main/java/com/ecep/contract/manager/ui/task/TaskMonitorViewController.java index 82d1e4e..1323797 100644 --- a/src/main/java/com/ecep/contract/manager/ui/task/TaskMonitorViewController.java +++ b/src/main/java/com/ecep/contract/manager/ui/task/TaskMonitorViewController.java @@ -36,7 +36,6 @@ import javafx.stage.WindowEvent; /** * 任务监控界面控制器 */ - @Lazy @Scope("prototype") @Component @@ -144,20 +143,7 @@ public class TaskMonitorViewController extends BaseController { return row; }); - - - // 更新按钮状态 - // updateButtonStates(); cancelTaskButton.disableProperty().bind(activeTasksTable.getSelectionModel().selectedItemProperty().isNull()); - // activeTasksTable.getSelectionModel().selectedItemProperty() - // .addListener((obs, oldVal, newVal) -> updateButtonStates()); - } - - /** - * 更新按钮状态 - */ - private void updateButtonStates() { - cancelTaskButton.setDisable(activeTasksTable.getSelectionModel().getSelectedItem() == null); } /** @@ -197,6 +183,7 @@ public class TaskMonitorViewController extends BaseController { alert.setHeaderText(history.getTitle()); ScrollPane scrollPane = new ScrollPane(); + scrollPane.setPrefHeight(300); VBox vBox = new VBox(); Label taskIdLabel = new Label("任务ID: " + history.getTaskId()); diff --git a/src/main/java/com/ecep/contract/manager/ui/task/TaskStatus.java b/src/main/java/com/ecep/contract/manager/ui/task/TaskStatus.java index 4f3409c..b04be61 100644 --- a/src/main/java/com/ecep/contract/manager/ui/task/TaskStatus.java +++ b/src/main/java/com/ecep/contract/manager/ui/task/TaskStatus.java @@ -5,9 +5,9 @@ package com.ecep.contract.manager.ui.task; */ public enum TaskStatus { /** - * 进入调度,等待执行 + * 进入等待延时队列,等待执行 */ - UN_SCHEDULED("未调度"), + DELAYED("延时"), /** * 已调度 */ diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index ea0c840..653a096 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -27,4 +27,8 @@ spring.data.jpa.repositories.enabled=true spring.lifecycle.performance.enabled=true # my.downloadsPath = C:\\Users\\SQQ\\Downloads\\ -logging.level.org.hibernate.tool.hbm2ddl=DEBUG \ No newline at end of file +logging.level.org.hibernate.tool.hbm2ddl=DEBUG + +# 在application.properties中添加 +logging.level.org.springframework.boot.context.metrics.buffering=DEBUG +logging.level.com.ecep.contract.manager.SpringApp=DEBUG \ No newline at end of file diff --git a/src/main/resources/ui/task/TaskMonitorView.fxml b/src/main/resources/ui/task/TaskMonitorView.fxml index 5c9ba8a..4be2d75 100644 --- a/src/main/resources/ui/task/TaskMonitorView.fxml +++ b/src/main/resources/ui/task/TaskMonitorView.fxml @@ -1,55 +1,63 @@ - - + + - + - - - - - - - -