From 542dad524420d162fa883368c8e762562702d2a0 Mon Sep 17 00:00:00 2001 From: tomsun28 Date: Mon, 13 Nov 2023 17:52:01 +0800 Subject: [PATCH 1/2] bugfix number variable in freemarker template display error --- manager/pom.xml | 7 +-- .../impl/AbstractAlertNotifyHandlerImpl.java | 4 +- .../manager/config/ThymeleafConfig.java | 50 ------------------- .../manager/service/impl/MailServiceImpl.java | 2 +- .../service/impl/NoticeConfigServiceImpl.java | 2 +- manager/src/main/resources/application.yml | 11 ++-- .../resources/templates/1-EmailTemplate.html | 4 +- .../manager/service/MailServiceTest.java | 4 -- script/application.yml | 11 ++-- .../conf/application.yml | 11 ++-- .../conf/application.yml | 11 ++-- .../conf/application.yml | 11 ++-- .../templates/manager/configmap.yaml | 10 +--- 13 files changed, 32 insertions(+), 106 deletions(-) delete mode 100644 manager/src/main/java/org/dromara/hertzbeat/manager/config/ThymeleafConfig.java diff --git a/manager/pom.xml b/manager/pom.xml index a591378ee64..02157c87141 100644 --- a/manager/pom.xml +++ b/manager/pom.xml @@ -85,12 +85,7 @@ org.springframework.boot spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-thymeleaf - - + org.springframework.boot spring-boot-starter-freemarker diff --git a/manager/src/main/java/org/dromara/hertzbeat/manager/component/alerter/impl/AbstractAlertNotifyHandlerImpl.java b/manager/src/main/java/org/dromara/hertzbeat/manager/component/alerter/impl/AbstractAlertNotifyHandlerImpl.java index 9aaee14da1f..b4c92ed065b 100644 --- a/manager/src/main/java/org/dromara/hertzbeat/manager/component/alerter/impl/AbstractAlertNotifyHandlerImpl.java +++ b/manager/src/main/java/org/dromara/hertzbeat/manager/component/alerter/impl/AbstractAlertNotifyHandlerImpl.java @@ -26,7 +26,6 @@ import org.dromara.hertzbeat.common.entity.alerter.Alert; import org.dromara.hertzbeat.common.entity.manager.NoticeTemplate; import org.dromara.hertzbeat.common.support.event.SystemConfigChangeEvent; -import org.dromara.hertzbeat.common.util.JsonUtil; import org.dromara.hertzbeat.common.util.ResourceBundleUtil; import org.dromara.hertzbeat.manager.component.alerter.AlertNotifyHandler; import org.dromara.hertzbeat.manager.service.NoticeConfigService; @@ -63,10 +62,10 @@ abstract class AbstractAlertNotifyHandlerImpl implements AlertNotifyHandler { protected String renderContent(NoticeTemplate noticeTemplate, Alert alert) throws TemplateException, IOException { - StringTemplateLoader stringLoader = new StringTemplateLoader(); freemarker.template.Template templateRes; Configuration cfg = new Configuration(Configuration.VERSION_2_3_0); + cfg.setNumberFormat("0"); Map model = new HashMap<>(16); model.put("title", bundle.getString("alerter.notify.title")); @@ -109,6 +108,7 @@ protected String renderContent(NoticeTemplate noticeTemplate, Alert alert) throw log.error("alert does not have mapping default notice template. type: {}.", type()); throw new NullPointerException(type() + " does not have mapping default notice template"); } + // TODO 单实例复用缓存 考虑多线程问题 String templateName = "freeMakerTemplate"; stringLoader.putTemplate(templateName, noticeTemplate.getContent()); cfg.setTemplateLoader(stringLoader); diff --git a/manager/src/main/java/org/dromara/hertzbeat/manager/config/ThymeleafConfig.java b/manager/src/main/java/org/dromara/hertzbeat/manager/config/ThymeleafConfig.java deleted file mode 100644 index 181a3c32356..00000000000 --- a/manager/src/main/java/org/dromara/hertzbeat/manager/config/ThymeleafConfig.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.dromara.hertzbeat.manager.config; - -import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver; -import org.thymeleaf.templatemode.TemplateMode; - -import java.nio.charset.StandardCharsets; - -/** - * @author gcdd1993 - * @version 2.1 - * Created by Musk.Chen on 2023/1/16 - */ -@Configuration -public class ThymeleafConfig { - - @Bean - public SpringResourceTemplateResolver templateResolver() { - SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver(); - templateResolver.setPrefix(ThymeleafProperties.DEFAULT_PREFIX); - templateResolver.setSuffix(".txt"); - templateResolver.setTemplateMode(TemplateMode.TEXT); - templateResolver.setCharacterEncoding(StandardCharsets.UTF_8.name()); - templateResolver.setOrder(2); - templateResolver.setCheckExistence(true); - templateResolver.setCacheable(true); - - return templateResolver; - } - -} diff --git a/manager/src/main/java/org/dromara/hertzbeat/manager/service/impl/MailServiceImpl.java b/manager/src/main/java/org/dromara/hertzbeat/manager/service/impl/MailServiceImpl.java index 86cdf1b9ea1..5cd3831994f 100644 --- a/manager/src/main/java/org/dromara/hertzbeat/manager/service/impl/MailServiceImpl.java +++ b/manager/src/main/java/org/dromara/hertzbeat/manager/service/impl/MailServiceImpl.java @@ -69,7 +69,7 @@ public String buildAlertHtmlTemplate(final Alert alert, NoticeTemplate noticeTem } monitorId = monitorId == null ? "External Alarm, No ID" : monitorId; monitorName = monitorName == null ? "External Alarm, No Name" : monitorName; - // Introduce thymeleaf context parameters to render pages + // Introduce context parameters to render pages Map model = new HashMap<>(16); model.put("nameTitle", bundle.getString("alerter.notify.title")); model.put("nameMonitorId", bundle.getString("alerter.notify.monitorId")); diff --git a/manager/src/main/java/org/dromara/hertzbeat/manager/service/impl/NoticeConfigServiceImpl.java b/manager/src/main/java/org/dromara/hertzbeat/manager/service/impl/NoticeConfigServiceImpl.java index 36cb5d7fd4f..566324732e5 100644 --- a/manager/src/main/java/org/dromara/hertzbeat/manager/service/impl/NoticeConfigServiceImpl.java +++ b/manager/src/main/java/org/dromara/hertzbeat/manager/service/impl/NoticeConfigServiceImpl.java @@ -250,7 +250,7 @@ public boolean sendTestMsg(NoticeReceiver noticeReceiver) { tags.put(CommonConstants.TAG_THRESHOLD_ID, "200"); Alert alert = new Alert(); alert.setTags(tags); - alert.setId(100L); + alert.setId(1003445L); alert.setTarget(ALERT_TEST_TARGET); alert.setPriority(CommonConstants.ALERT_PRIORITY_CODE_CRITICAL); alert.setContent(ALERT_TEST_CONTENT); diff --git a/manager/src/main/resources/application.yml b/manager/src/main/resources/application.yml index 79834dd92c5..198dfff3bbc 100644 --- a/manager/src/main/resources/application.yml +++ b/manager/src/main/resources/application.yml @@ -31,13 +31,8 @@ spring: # need to disable spring boot mongodb auto config, or default mongodb connection tried and failed.. autoconfigure: exclude: org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration, org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration - thymeleaf: - prefix: classpath:/templates/ - check-template-location: true - cache: true - suffix: .html - mode: HTML - template-resolver-order: 1 + freemarker: + enabled: false management: health: @@ -172,4 +167,4 @@ alerter: scheduler: server: enabled: true - port: 1158 \ No newline at end of file + port: 1158 diff --git a/manager/src/main/resources/templates/1-EmailTemplate.html b/manager/src/main/resources/templates/1-EmailTemplate.html index 6fa15fa0ddd..33a233bdda0 100644 --- a/manager/src/main/resources/templates/1-EmailTemplate.html +++ b/manager/src/main/resources/templates/1-EmailTemplate.html @@ -1,5 +1,5 @@ - + @@ -871,4 +871,4 @@ - \ No newline at end of file + diff --git a/manager/src/test/java/org/dromara/hertzbeat/manager/service/MailServiceTest.java b/manager/src/test/java/org/dromara/hertzbeat/manager/service/MailServiceTest.java index 67a54ee34ac..c6071f200f7 100644 --- a/manager/src/test/java/org/dromara/hertzbeat/manager/service/MailServiceTest.java +++ b/manager/src/test/java/org/dromara/hertzbeat/manager/service/MailServiceTest.java @@ -12,7 +12,6 @@ import org.mockito.Mock; import org.mockito.Spy; import org.mockito.junit.jupiter.MockitoExtension; -import org.thymeleaf.TemplateEngine; import java.io.IOException; import java.util.ResourceBundle; @@ -32,9 +31,6 @@ class MailServiceTest { @InjectMocks private MailServiceImpl mailService; - @Mock - private TemplateEngine templateEngine; - @Mock private AlerterProperties alerterProperties; diff --git a/script/application.yml b/script/application.yml index 193aeb1ca90..a5352de463e 100644 --- a/script/application.yml +++ b/script/application.yml @@ -29,12 +29,11 @@ spring: static-locations: - classpath:/dist/ - classpath:../dist/ - thymeleaf: - prefix: classpath:/templates/ - check-template-location: true - cache: true - suffix: .html - mode: HTML + # need to disable spring boot mongodb auto config, or default mongodb connection tried and failed.. + autoconfigure: + exclude: org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration, org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration + freemarker: + enabled: false management: health: diff --git a/script/docker-compose/hertzbeat-mysql-iotdb/conf/application.yml b/script/docker-compose/hertzbeat-mysql-iotdb/conf/application.yml index a209465ed1f..199aa16af9a 100644 --- a/script/docker-compose/hertzbeat-mysql-iotdb/conf/application.yml +++ b/script/docker-compose/hertzbeat-mysql-iotdb/conf/application.yml @@ -29,12 +29,11 @@ spring: static-locations: - classpath:/dist/ - classpath:../dist/ - thymeleaf: - prefix: classpath:/templates/ - check-template-location: true - cache: true - suffix: .html - mode: HTML + # need to disable spring boot mongodb auto config, or default mongodb connection tried and failed.. + autoconfigure: + exclude: org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration, org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration + freemarker: + enabled: false management: health: diff --git a/script/docker-compose/hertzbeat-mysql-tdengine/conf/application.yml b/script/docker-compose/hertzbeat-mysql-tdengine/conf/application.yml index 6c57ec3dd11..45bbb39fee2 100644 --- a/script/docker-compose/hertzbeat-mysql-tdengine/conf/application.yml +++ b/script/docker-compose/hertzbeat-mysql-tdengine/conf/application.yml @@ -29,12 +29,11 @@ spring: static-locations: - classpath:/dist/ - classpath:../dist/ - thymeleaf: - prefix: classpath:/templates/ - check-template-location: true - cache: true - suffix: .html - mode: HTML + # need to disable spring boot mongodb auto config, or default mongodb connection tried and failed.. + autoconfigure: + exclude: org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration, org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration + freemarker: + enabled: false management: health: diff --git a/script/docker-compose/hertzbeat-postgresql-iotdb/conf/application.yml b/script/docker-compose/hertzbeat-postgresql-iotdb/conf/application.yml index a6ae7e8a1d3..d6172dea4c8 100644 --- a/script/docker-compose/hertzbeat-postgresql-iotdb/conf/application.yml +++ b/script/docker-compose/hertzbeat-postgresql-iotdb/conf/application.yml @@ -29,12 +29,11 @@ spring: static-locations: - classpath:/dist/ - classpath:../dist/ - thymeleaf: - prefix: classpath:/templates/ - check-template-location: true - cache: true - suffix: .html - mode: HTML + # need to disable spring boot mongodb auto config, or default mongodb connection tried and failed.. + autoconfigure: + exclude: org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration, org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration + freemarker: + enabled: false management: health: diff --git a/script/helm/hertzbeat/templates/manager/configmap.yaml b/script/helm/hertzbeat/templates/manager/configmap.yaml index f1d71e6aa34..caa392150e5 100644 --- a/script/helm/hertzbeat/templates/manager/configmap.yaml +++ b/script/helm/hertzbeat/templates/manager/configmap.yaml @@ -25,14 +25,8 @@ data: # need to disable spring boot mongodb auto config, or default mongodb connection tried and failed.. autoconfigure: exclude: org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration, org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration - thymeleaf: - prefix: classpath:/templates/ - check-template-location: true - cache: true - suffix: .html - mode: HTML - template-resolver-order: 1 - + freemarker: + enabled: false management: health: mail: From 78aff8edc7186b6fe406523962d9af29d31ddf0f Mon Sep 17 00:00:00 2001 From: tomsun28 Date: Mon, 13 Nov 2023 17:52:40 +0800 Subject: [PATCH 2/2] bugfix number variable in freemarker template display error --- .../component/alerter/impl/AbstractAlertNotifyHandlerImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manager/src/main/java/org/dromara/hertzbeat/manager/component/alerter/impl/AbstractAlertNotifyHandlerImpl.java b/manager/src/main/java/org/dromara/hertzbeat/manager/component/alerter/impl/AbstractAlertNotifyHandlerImpl.java index b4c92ed065b..95866a79583 100644 --- a/manager/src/main/java/org/dromara/hertzbeat/manager/component/alerter/impl/AbstractAlertNotifyHandlerImpl.java +++ b/manager/src/main/java/org/dromara/hertzbeat/manager/component/alerter/impl/AbstractAlertNotifyHandlerImpl.java @@ -51,6 +51,7 @@ @Slf4j abstract class AbstractAlertNotifyHandlerImpl implements AlertNotifyHandler { + private static final String NUMBER_FORMAT = "0"; protected static final DateTimeFormatter DTF = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); protected ResourceBundle bundle = ResourceBundleUtil.getBundle("alerter"); @Resource @@ -65,7 +66,7 @@ protected String renderContent(NoticeTemplate noticeTemplate, Alert alert) throw StringTemplateLoader stringLoader = new StringTemplateLoader(); freemarker.template.Template templateRes; Configuration cfg = new Configuration(Configuration.VERSION_2_3_0); - cfg.setNumberFormat("0"); + cfg.setNumberFormat(NUMBER_FORMAT); Map model = new HashMap<>(16); model.put("title", bundle.getString("alerter.notify.title"));