Merge branch 'master' into eureka

# Conflicts:
#	sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/configuration/ServiceConfiguration.java
eureka
tanghc 4 years ago
commit b05e0409da
  1. 2
      sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/bean/SopConstants.java
  2. 91
      sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/configuration/ServiceConfiguration.java
  3. 89
      sop-common/sop-service-common/src/main/java/com/gitee/sop/servercommon/configuration/SpringmvcConfiguration.java
  4. 9
      sop-example/sop-springmvc/src/main/java/com/gitee/app/config/OpenServiceConfig.java

@ -54,6 +54,6 @@ public class SopConstants {
public static final String TARGET_SERVICE = "sop-target-service"; public static final String TARGET_SERVICE = "sop-target-service";
public static final String RESTFUL_REQUEST = "sop-restful-request"; public static final String RESTFUL_REQUEST = "sop-restful-request";
public static final String METADATA_KEY_TIME_STARTUP = "time.startup"; public static final String METADATA_KEY_TIME_STARTUP = "server.startup-time";
} }

@ -1,88 +1,37 @@
package com.gitee.sop.servercommon.configuration; package com.gitee.sop.servercommon.configuration;
import com.gitee.sop.servercommon.bean.ServiceConfig; import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.gitee.sop.servercommon.interceptor.ServiceContextInterceptor; import com.alibaba.cloud.nacos.discovery.NacosWatch;
import com.gitee.sop.servercommon.message.ServiceErrorFactory;
import com.gitee.sop.servercommon.route.ServiceRouteController;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.http.converter.HttpMessageConverter; import org.springframework.core.env.Environment;
import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.scheduling.TaskScheduler;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.annotation.PostConstruct; import java.util.Map;
import java.nio.charset.StandardCharsets;
import java.util.List;
/** /**
* @author tanghc * @author tanghc
*/ */
@Slf4j @Slf4j
public class ServiceConfiguration implements WebMvcConfigurer { public class ServiceConfiguration extends SpringmvcConfiguration {
public ServiceConfiguration() {
System.setProperty("eureka.instance.metadata-map.time.startup", String.valueOf(System.currentTimeMillis()));
ServiceConfig.getInstance().getI18nModules().add("i18n/isp/bizerror");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 支持swagger-bootstrap-ui首页
registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
// 支持默认swagger
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
// 解决controller返回字符串中文乱码问题
for (HttpMessageConverter<?> converter : converters) {
if (converter instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter)converter).setDefaultCharset(StandardCharsets.UTF_8);
}
}
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 添加拦截器
registry.addInterceptor(new ServiceContextInterceptor());
}
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
GlobalExceptionHandler globalExceptionHandler() { @ConditionalOnProperty("spring.cloud.nacos.discovery.server-addr")
return new GlobalExceptionHandler(); public NacosWatch nacosWatch(NacosDiscoveryProperties nacosDiscoveryProperties, ObjectProvider<TaskScheduler> taskScheduler, Environment environment) {
} Map<String, String> metadata = nacosDiscoveryProperties.getMetadata();
String contextPath = environment.getProperty(METADATA_SERVER_CONTEXT_PATH);
@Bean // 将context-path信息加入到metadata中
@ConditionalOnMissingBean if (contextPath != null) {
ServiceRouteController serviceRouteInfoHandler() { metadata.put(METADATA_SERVER_CONTEXT_PATH, contextPath);
return new ServiceRouteController(); }
} // 在元数据中新增启动时间,不能修改这个值,不然网关拉取接口会有问题
// 如果没有这个值,网关会忽略这个服务
@PostConstruct metadata.put("server.startup-time", String.valueOf(System.currentTimeMillis()));
public final void after() { return new NacosWatch(nacosDiscoveryProperties, taskScheduler);
log.info("-----spring容器加载完毕-----");
initMessage();
doAfter();
}
/**
* spring容器加载完毕后执行
*/
protected void doAfter() {
}
protected void initMessage() {
ServiceErrorFactory.initMessageSource(ServiceConfig.getInstance().getI18nModules());
} }
} }

@ -0,0 +1,89 @@
package com.gitee.sop.servercommon.configuration;
import com.gitee.sop.servercommon.bean.ServiceConfig;
import com.gitee.sop.servercommon.interceptor.ServiceContextInterceptor;
import com.gitee.sop.servercommon.message.ServiceErrorFactory;
import com.gitee.sop.servercommon.route.ServiceRouteController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.annotation.PostConstruct;
import java.nio.charset.StandardCharsets;
import java.util.List;
/**
* @author tanghc
*/
@Slf4j
public class SpringmvcConfiguration implements WebMvcConfigurer {
public static final String METADATA_SERVER_CONTEXT_PATH = "server.servlet.context-path";
public SpringmvcConfiguration() {
ServiceConfig.getInstance().getI18nModules().add("i18n/isp/bizerror");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 支持swagger-bootstrap-ui首页
registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
// 支持默认swagger
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
// 解决controller返回字符串中文乱码问题
for (HttpMessageConverter<?> converter : converters) {
if (converter instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter)converter).setDefaultCharset(StandardCharsets.UTF_8);
}
}
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 添加拦截器
registry.addInterceptor(new ServiceContextInterceptor());
}
@Bean
@ConditionalOnMissingBean
GlobalExceptionHandler globalExceptionHandler() {
return new GlobalExceptionHandler();
}
@Bean
@ConditionalOnMissingBean
ServiceRouteController serviceRouteInfoHandler() {
return new ServiceRouteController();
}
@PostConstruct
public final void after() {
log.info("-----spring容器加载完毕-----");
initMessage();
doAfter();
}
/**
* spring容器加载完毕后执行
*/
protected void doAfter() {
}
protected void initMessage() {
ServiceErrorFactory.initMessageSource(ServiceConfig.getInstance().getI18nModules());
}
}

@ -1,14 +1,13 @@
package com.gitee.app.config; package com.gitee.app.config;
import com.alibaba.nacos.api.annotation.NacosInjected; import com.alibaba.nacos.api.annotation.NacosInjected;
import com.alibaba.nacos.api.annotation.NacosProperties;
import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.api.naming.pojo.Instance;
import com.alibaba.nacos.client.naming.utils.NetUtils; import com.alibaba.nacos.client.naming.utils.NetUtils;
import com.alibaba.nacos.spring.context.annotation.discovery.EnableNacosDiscovery; import com.alibaba.nacos.spring.context.annotation.discovery.EnableNacosDiscovery;
import com.gitee.sop.servercommon.bean.ServiceConfig; import com.gitee.sop.servercommon.bean.ServiceConfig;
import com.gitee.sop.servercommon.configuration.ServiceConfiguration; import com.gitee.sop.servercommon.configuration.SpringmvcConfiguration;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@ -19,13 +18,14 @@ import org.springframework.beans.factory.annotation.Value;
*/ */
@Slf4j @Slf4j
@EnableNacosDiscovery @EnableNacosDiscovery
public class OpenServiceConfig extends ServiceConfiguration { public class OpenServiceConfig extends SpringmvcConfiguration {
public static final String SPRING_APPLICATION_NAME = "spring.application.name"; public static final String SPRING_APPLICATION_NAME = "spring.application.name";
public static final String SERVER_CONTEXT_PATH = "server.servlet.context-path"; public static final String SERVER_CONTEXT_PATH = "server.servlet.context-path";
public static final String SERVER_IP = "server.ip"; public static final String SERVER_IP = "server.ip";
public static final String SERVER_PORT = "server.port"; public static final String SERVER_PORT = "server.port";
public static final String METADATA_TIME_STARTUP = "server.startup-time";
static { static {
ServiceConfig.getInstance().setDefaultVersion("1.0"); ServiceConfig.getInstance().setDefaultVersion("1.0");
@ -65,7 +65,8 @@ public class OpenServiceConfig extends ServiceConfiguration {
instance.setServiceName(serviceId); instance.setServiceName(serviceId);
instance.setIp(ip); instance.setIp(ip);
instance.setPort(port); instance.setPort(port);
instance.getMetadata().put(SERVER_CONTEXT_PATH, contextPath); instance.getMetadata().put(METADATA_SERVER_CONTEXT_PATH, contextPath);
instance.getMetadata().put(METADATA_TIME_STARTUP, String.valueOf(System.currentTimeMillis()));
return instance; return instance;
} }

Loading…
Cancel
Save