Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature: hippo4j config model in nacos config before check #1438

Merged
merged 1 commit into from
Sep 2, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@

package cn.hippo4j.threadpool.dynamic.api;

import java.util.Map;

/**
* Bootstrap properties interface.
*/
Expand Down Expand Up @@ -70,4 +72,11 @@ default String getServerAddr() {
default Boolean getBanner() {
return null;
}

/**
* Get nacos.
*/
default Map<String, String> getNacos() {
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

package cn.hippo4j.core.enable;

import cn.hippo4j.common.toolkit.MapUtil;
import cn.hippo4j.common.toolkit.StringUtil;
import cn.hippo4j.core.config.ConfigEmptyException;
import cn.hippo4j.threadpool.dynamic.api.BootstrapPropertiesInterface;
Expand All @@ -26,6 +27,7 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;

import java.util.Map;
import java.util.Objects;

/**
Expand All @@ -36,36 +38,62 @@
public class BeforeCheckConfiguration {

private final String bootstrapPropertiesClassName = "cn.hippo4j.springboot.starter.config.BootstrapProperties";
private final String bootstrapConfigPropertiesClassName = "cn.hippo4j.threadpool.dynamic.mode.config.properties.BootstrapConfigProperties";

@Bean
public BeforeCheckConfiguration.BeforeCheck dynamicThreadPoolBeforeCheckBean(@Autowired(required = false) BootstrapPropertiesInterface properties,
ConfigurableEnvironment environment) {
// TODO test
boolean checkFlag = properties != null && Objects.equals(bootstrapPropertiesClassName, properties.getClass().getName()) && properties.getEnable();
boolean checkFlag = properties != null && properties.getEnable();
if (checkFlag) {
String namespace = properties.getNamespace();
if (StringUtil.isBlank(namespace)) {
throw new ConfigEmptyException(
"Web server failed to start. The dynamic thread pool namespace is empty.",
"Please check whether the [spring.dynamic.thread-pool.namespace] configuration is empty or an empty string.");
}
String itemId = properties.getItemId();
if (StringUtil.isBlank(itemId)) {
throw new ConfigEmptyException(
"Web server failed to start. The dynamic thread pool item id is empty.",
"Please check whether the [spring.dynamic.thread-pool.item-id] configuration is empty or an empty string.");
}
String serverAddr = properties.getServerAddr();
if (StringUtil.isBlank(serverAddr)) {
throw new ConfigEmptyException(
"Web server failed to start. The dynamic thread pool server addr is empty.",
"Please check whether the [spring.dynamic.thread-pool.server-addr] configuration is empty or an empty string.");
}
String applicationName = environment.getProperty("spring.application.name");
if (StringUtil.isBlank(applicationName)) {
throw new ConfigEmptyException(
"Web server failed to start. The dynamic thread pool application name is empty.",
"Please check whether the [spring.application.name] configuration is empty or an empty string.");
String propertiesClassName = properties.getClass().getName();
switch (propertiesClassName) {
case bootstrapPropertiesClassName: {
String namespace = properties.getNamespace();
if (StringUtil.isBlank(namespace)) {
throw new ConfigEmptyException(
"Web server failed to start. The dynamic thread pool namespace is empty.",
"Please check whether the [spring.dynamic.thread-pool.namespace] configuration is empty or an empty string.");
}
String itemId = properties.getItemId();
if (StringUtil.isBlank(itemId)) {
throw new ConfigEmptyException(
"Web server failed to start. The dynamic thread pool item id is empty.",
"Please check whether the [spring.dynamic.thread-pool.item-id] configuration is empty or an empty string.");
}
String serverAddr = properties.getServerAddr();
if (StringUtil.isBlank(serverAddr)) {
throw new ConfigEmptyException(
"Web server failed to start. The dynamic thread pool server addr is empty.",
"Please check whether the [spring.dynamic.thread-pool.server-addr] configuration is empty or an empty string.");
}
String applicationName = environment.getProperty("spring.application.name");
if (StringUtil.isBlank(applicationName)) {
throw new ConfigEmptyException(
"Web server failed to start. The dynamic thread pool application name is empty.",
"Please check whether the [spring.application.name] configuration is empty or an empty string.");
}
break;
}
case bootstrapConfigPropertiesClassName: {
Map<String, String> nacos = properties.getNacos();
if (MapUtil.isNotEmpty(nacos)) {
String group = nacos.get("group");
if (StringUtil.isBlank(group)) {
throw new ConfigEmptyException(
"Web server failed to start. The dynamic thread pool nacos group is empty.",
"Please check whether the [spring.dynamic.thread-pool.nacos.group] configuration is empty or an empty string.");
}
String dataId = nacos.get("data-id");
if (StringUtil.isBlank(dataId)) {
throw new ConfigEmptyException(
"Web server failed to start. The dynamic thread pool nacos data-id is empty.",
"Please check whether the [spring.dynamic.thread-pool.nacos.data-id] configuration is empty or an empty string.");
}
}
break;
}
default:
}
}
return new BeforeCheckConfiguration.BeforeCheck();
Expand Down