diff --git a/escheduler-api/pom.xml b/escheduler-api/pom.xml
index e0e8c54a3b176d09d9b654b4bc88db36c85826d5..31120c388360dc2c6a217c1d9426676683334050 100644
--- a/escheduler-api/pom.xml
+++ b/escheduler-api/pom.xml
@@ -35,35 +35,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
org.springframework.boot
spring-boot-starter-web
@@ -170,14 +142,21 @@
io.springfox
springfox-swagger2
- 2.8.0
+ 2.9.2
io.springfox
springfox-swagger-ui
- 2.8.0
+ 2.9.2
+
+
+
+ com.github.xiaoymin
+ swagger-bootstrap-ui
+ 1.9.3
+
cn.analysys
escheduler-rpc
@@ -189,6 +168,11 @@
4.12
test
+
+ io.swagger
+ swagger-jaxrs
+ 1.5.12
+
diff --git a/escheduler-api/src/main/java/cn/escheduler/api/ApiApplicationServer.java b/escheduler-api/src/main/java/cn/escheduler/api/ApiApplicationServer.java
index 5ddc72ffbc11db696817429db4f61252e5bb78d3..9b84c7f2f7acca2df15cf8715bdb47c1e46d0645 100644
--- a/escheduler-api/src/main/java/cn/escheduler/api/ApiApplicationServer.java
+++ b/escheduler-api/src/main/java/cn/escheduler/api/ApiApplicationServer.java
@@ -19,14 +19,19 @@ package cn.escheduler.api;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@SpringBootApplication
@ServletComponentScan
@ComponentScan("cn.escheduler")
-public class ApiApplicationServer {
+@EnableSwagger2
+public class ApiApplicationServer extends SpringBootServletInitializer {
+
public static void main(String[] args) {
SpringApplication.run(ApiApplicationServer.class, args);
}
+
+
}
diff --git a/escheduler-api/src/main/java/cn/escheduler/api/configuration/AppConfiguration.java b/escheduler-api/src/main/java/cn/escheduler/api/configuration/AppConfiguration.java
index 00272ea5a735da24c6a813228587d7bb19439348..74a29a13b5bafdeb95b86e042ac28e5eb282cca7 100644
--- a/escheduler-api/src/main/java/cn/escheduler/api/configuration/AppConfiguration.java
+++ b/escheduler-api/src/main/java/cn/escheduler/api/configuration/AppConfiguration.java
@@ -20,6 +20,12 @@ import cn.escheduler.api.interceptor.LoginHandlerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
+import org.springframework.web.servlet.LocaleResolver;
+import org.springframework.web.servlet.i18n.CookieLocaleResolver;
+import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
+
+import java.util.Locale;
+
/**
* application configuration
@@ -31,24 +37,48 @@ public class AppConfiguration implements WebMvcConfigurer {
public static final String LOGIN_PATH_PATTERN = "/login";
public static final String PATH_PATTERN = "/**";
- @Override
- public void addInterceptors(InterceptorRegistry registry) {
- registry.addInterceptor(loginInterceptor()).addPathPatterns(LOGIN_INTERCEPTOR_PATH_PATTERN).excludePathPatterns(LOGIN_PATH_PATTERN,"/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html");
- }
-//
-// @Override
-// public void addResourceHandlers(ResourceHandlerRegistry registry) {
-// registry.addResourceHandler("swagger-ui.html")
-// .addResourceLocations("classpath:/META-INF/resources/");
-// registry.addResourceHandler("/webjars/**")
-// .addResourceLocations("classpath:/META-INF/resources/webjars/");
-// }
@Bean
public LoginHandlerInterceptor loginInterceptor() {
return new LoginHandlerInterceptor();
}
+
+ //Cookie
+ @Bean
+ public LocaleResolver localeResolver() {
+ CookieLocaleResolver localeResolver = new CookieLocaleResolver();
+ localeResolver.setCookieName("localeCookie");
+ //设置默认区域
+ localeResolver.setDefaultLocale(Locale.ENGLISH);
+ localeResolver.setCookieMaxAge(3600);//设置cookie有效期.
+ return localeResolver;
+ }
+
+ @Bean
+ public LocaleChangeInterceptor localeChangeInterceptor() {
+ LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
+ // 参数名
+ lci.setParamName("lang");
+
+ return lci;
+ }
+
+
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ registry.addInterceptor(loginInterceptor()).addPathPatterns(LOGIN_INTERCEPTOR_PATH_PATTERN).excludePathPatterns(LOGIN_PATH_PATTERN,"/swagger-resources/**", "/webjars/**", "/v2/**", "/doc.html", "*.html");
+ //i18n
+ registry.addInterceptor(localeChangeInterceptor());
+ }
+
+
+ @Override
+ public void addResourceHandlers(ResourceHandlerRegistry registry) {
+ registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
+ registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
+ }
+
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping(PATH_PATTERN).allowedOrigins("*").allowedMethods("*");
@@ -64,4 +94,8 @@ public class AppConfiguration implements WebMvcConfigurer {
public void configureContentNegotiation(final ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false);
}
+
+
+
+
}
diff --git a/escheduler-api/src/main/java/cn/escheduler/api/configuration/Swagger2.java b/escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerConfig.java
similarity index 85%
rename from escheduler-api/src/main/java/cn/escheduler/api/configuration/Swagger2.java
rename to escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerConfig.java
index 1e5b9b8fcb3b545658da1bc8a133df99aedbb2b8..f55d04ab921011a02bc98e2cd972ddcc950ab847 100644
--- a/escheduler-api/src/main/java/cn/escheduler/api/configuration/Swagger2.java
+++ b/escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerConfig.java
@@ -16,6 +16,7 @@
*/
package cn.escheduler.api.configuration;
+import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -35,7 +36,8 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
*/
@Configuration
@EnableSwagger2
-public class Swagger2 implements WebMvcConfigurer {
+@EnableSwaggerBootstrapUI
+public class SwaggerConfig implements WebMvcConfigurer {
@Bean
public Docket createRestApi() {
@@ -45,8 +47,8 @@ public class Swagger2 implements WebMvcConfigurer {
}
private ApiInfo apiInfo() {
- return new ApiInfoBuilder().title("api docs").description("easy scheduler api docs")
- .termsOfServiceUrl("https://www.analysys.com").version("1.0.0").build();
+ return new ApiInfoBuilder().title("Easy Scheduler Api Docs").description("Easy Scheduler Api Docs")
+ .version("1.0.0").build();
}
diff --git a/escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerI18nPlugin.java b/escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerI18nPlugin.java
new file mode 100644
index 0000000000000000000000000000000000000000..4e4be961e5c0571f03d0a58166d066bbd7a05511
--- /dev/null
+++ b/escheduler-api/src/main/java/cn/escheduler/api/configuration/SwaggerI18nPlugin.java
@@ -0,0 +1,52 @@
+package cn.escheduler.api.configuration;
+
+import java.util.List;
+import java.util.Locale;
+import com.fasterxml.classmate.TypeResolver;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.MessageSource;
+import org.springframework.context.i18n.LocaleContextHolder;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import io.swagger.annotations.ApiOperation;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.OperationBuilderPlugin;
+import springfox.documentation.spi.service.contexts.OperationContext;
+
+
+@Component
+@Order(Ordered.HIGHEST_PRECEDENCE - 10)
+public class SwaggerI18nPlugin implements OperationBuilderPlugin {
+
+ private static final Logger logger = LoggerFactory.getLogger(SwaggerI18nPlugin.class);
+
+ @Autowired
+ private MessageSource messageSource;
+
+ @Override
+ public void apply(OperationContext context) {
+
+ Locale locale = LocaleContextHolder.getLocale();
+
+ List list = context.findAllAnnotations(ApiOperation.class);
+ if (list.size() > 0) {
+ for(ApiOperation api : list){
+ context.operationBuilder().summary(messageSource.getMessage(api.value(), null, locale));
+ context.operationBuilder().notes(messageSource.getMessage(api.notes(), null, locale));
+ }
+ }
+
+
+ }
+
+
+ @Override
+ public boolean supports(DocumentationType delimiter) {
+ return true;
+ }
+
+}
diff --git a/escheduler-api/src/main/java/cn/escheduler/api/controller/LoginController.java b/escheduler-api/src/main/java/cn/escheduler/api/controller/LoginController.java
index 061a2d404d81fab11b51be6b3302dbcd830f0894..cd46574d50d3b3458a2182540cf0ce069c8f847a 100644
--- a/escheduler-api/src/main/java/cn/escheduler/api/controller/LoginController.java
+++ b/escheduler-api/src/main/java/cn/escheduler/api/controller/LoginController.java
@@ -23,6 +23,7 @@ import cn.escheduler.api.service.UsersService;
import cn.escheduler.api.utils.Constants;
import cn.escheduler.api.utils.Result;
import cn.escheduler.dao.model.User;
+import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
@@ -31,12 +32,16 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.MessageSource;
+import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import java.util.Locale;
+
import static cn.escheduler.api.enums.Status.*;
/**
@@ -44,16 +49,22 @@ import static cn.escheduler.api.enums.Status.*;
*/
@RestController
@RequestMapping("")
+@Api(value = "", tags = {"中国"}, description = "中国")
public class LoginController extends BaseController {
private static final Logger logger = LoggerFactory.getLogger(LoginController.class);
+ private Locale locale = LocaleContextHolder.getLocale();
+
@Autowired
private SessionService sessionService;
@Autowired
private UsersService userService;
+ @Autowired
+ private MessageSource messageSource;
+
/**
* login
*
@@ -63,10 +74,10 @@ public class LoginController extends BaseController {
* @param response
* @return
*/
- @ApiOperation(value="更新用户详细信息", notes="根据url的id来指定更新对象,并根据传过来的user信息来更新用户详细信息")
+ @ApiOperation(value = "test", notes="loginNotes")
@ApiImplicitParams({
- @ApiImplicitParam(name = "userName", value = "用户名", required = true, dataType = "String"),
- @ApiImplicitParam(name = "userPassword", value = "密码", required = true, dataType = "String")
+ @ApiImplicitParam(name = "userName", value = "userName", required = true, type = "String"),
+ @ApiImplicitParam(name = "userPassword", value = "userPassword", required = true, type ="String")
})
@RequestMapping(value = "/login")
public Result login(@RequestParam(value = "userName") String userName,
diff --git a/escheduler-api/src/main/resources/application.properties b/escheduler-api/src/main/resources/application.properties
index 2709f419efe90974d3b6997e73e7682d955a2c70..118b70e61675b04d2d698bbc8d59e7e050823abf 100644
--- a/escheduler-api/src/main/resources/application.properties
+++ b/escheduler-api/src/main/resources/application.properties
@@ -12,3 +12,8 @@ spring.servlet.multipart.max-request-size=1024MB
#post content
server.jetty.max-http-post-size=5000000
+
+spring.messages.encoding=UTF-8
+
+#i18n classpath folder , file prefix messages, if have many files, use "," seperator
+spring.messages.basename=messages
diff --git a/escheduler-api/src/main/resources/messages.properties b/escheduler-api/src/main/resources/messages.properties
new file mode 100644
index 0000000000000000000000000000000000000000..89ddfd5201b344dc53bfe84528c9cc414b465a14
--- /dev/null
+++ b/escheduler-api/src/main/resources/messages.properties
@@ -0,0 +1,5 @@
+welcome=hello, welcome !
+test=test
+userName=user name
+userPassword=user password
+loginNotes=login notes
\ No newline at end of file
diff --git a/escheduler-api/src/main/resources/messages_en_US.properties b/escheduler-api/src/main/resources/messages_en_US.properties
new file mode 100644
index 0000000000000000000000000000000000000000..89ddfd5201b344dc53bfe84528c9cc414b465a14
--- /dev/null
+++ b/escheduler-api/src/main/resources/messages_en_US.properties
@@ -0,0 +1,5 @@
+welcome=hello, welcome !
+test=test
+userName=user name
+userPassword=user password
+loginNotes=login notes
\ No newline at end of file
diff --git a/escheduler-api/src/main/resources/messages_zh_CN.properties b/escheduler-api/src/main/resources/messages_zh_CN.properties
new file mode 100644
index 0000000000000000000000000000000000000000..4c21e733999fc4304b8ae698b5afad1dfc98fc66
--- /dev/null
+++ b/escheduler-api/src/main/resources/messages_zh_CN.properties
@@ -0,0 +1,5 @@
+welcome=您好,欢迎你!
+test=测试
+userName=用户名
+userPassword=用户密码
+loginNotes=登录xxx
\ No newline at end of file
diff --git a/escheduler-server/src/main/java/cn/escheduler/server/worker/runner/FetchTaskThread.java b/escheduler-server/src/main/java/cn/escheduler/server/worker/runner/FetchTaskThread.java
index 6ad3b71f0496559d6d0f592acfdff3b0bc61b3ce..3ecafde57af5c7494ce9b136b21af20df66b1780 100644
--- a/escheduler-server/src/main/java/cn/escheduler/server/worker/runner/FetchTaskThread.java
+++ b/escheduler-server/src/main/java/cn/escheduler/server/worker/runner/FetchTaskThread.java
@@ -134,7 +134,6 @@ public class FetchTaskThread implements Runnable{
public void run() {
while (Stopper.isRunning()){
- long start = System.currentTimeMillis();
InterProcessMutex mutex = null;
try {
if(OSUtils.checkResource(this.conf, false)) {
@@ -222,7 +221,6 @@ public class FetchTaskThread implements Runnable{
// submit task
workerExecService.submit(new TaskScheduleThread(taskInstance, processDao));
- logger.info("{} 耗时: {} ms",taskQueueStr,System.currentTimeMillis() - start );
}
}
diff --git a/pom.xml b/pom.xml
index 4e9cc32dca6a7a06c36b476dadfa8d980490bdc1..ee2b1b36262ce961b234d4b19f05cea51c96b114 100644
--- a/pom.xml
+++ b/pom.xml
@@ -114,6 +114,11 @@
+
+ cn.analysys
+ escheduler-server
+ ${project.version}
+
cn.analysys
escheduler-common
@@ -326,7 +331,7 @@
com.google.guava
guava
- 19.0
+ 20.0