Closed luodianhanxuan closed 4 years ago
2.1.0
spring boot 按照文档配置项目正常注册到调度中心
当 spring boot 项目的配置文件是 application.yml 时,客户端日志显示注册成功,但是在调度中心界面显示注册的 executor 数量为 0 ,但是当 application.yml 换成 application.properties ,能够正常注册。
docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://47.104.200.143:7306/xxl_job?Unicode=true&characterEncoding=UTF-8 --spring.datasource.username=xxxxxx --spring.datasource.password=xxxxxx --server.context-path" -p 9090:8080 -v /data/xxl_job:/data/applogs --name xxl-job-admin -d xuxueli/xxl-job-admin:2.1.0
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.21.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>test</artifactId> <version>0.0.1-SNAPSHOT</version> <name>test</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- xxl-job-core --> <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.1.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
- application.yml ```yaml xxl: job: admin: addresses: http://127.0.0.1:9090 executor: appname: demo port: 9999
package com.example.test.core.config;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;
/**
@author xuxueli 2017-04-28 */ @Configuration public class XxlJobConfig { private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@Value("${xxl.job.admin.addresses}") private String adminAddresses;
@Value("${xxl.job.executor.appname}") private String appName;
// @Value("${xxl.job.executor.ip}") private String ip;
@Value("${xxl.job.executor.port}") private int port;
// @Value("${xxl.job.accessToken}") private String accessToken;
// @Value("${xxl.job.executor.logpath}") private String logPath;
// @Value("${xxl.job.executor.logretentiondays}") private int logRetentionDays;
@Bean(initMethod = "start", destroyMethod = "destroy") public XxlJobSpringExecutor xxlJobExecutor() { logger.info(">>>>>>>>>>> xxl-job config init."); XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); xxlJobSpringExecutor.setAdminAddresses(adminAddresses); xxlJobSpringExecutor.setAppName(appName); xxlJobSpringExecutor.setIp(ip); xxlJobSpringExecutor.setPort(port); xxlJobSpringExecutor.setAccessToken(accessToken); xxlJobSpringExecutor.setLogPath(logPath); xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); return xxlJobSpringExecutor; }
}
- DemoJobHandler.java ```java package com.example.test.service.jobhandler; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.IJobHandler; import com.xxl.job.core.handler.annotation.JobHandler; import com.xxl.job.core.log.XxlJobLogger; import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; /** * 任务Handler示例(Bean模式) * * 开发步骤: * 1、继承"IJobHandler":“com.xxl.job.core.handler.IJobHandler”; * 2、注册到Spring容器:添加“@Component”注解,被Spring容器扫描为Bean实例; * 3、注册到执行器工厂:添加“@JobHandler(value="自定义jobhandler名称")”注解,注解value值对应的是调度中心新建任务的JobHandler属性的值。 * 4、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志; * * @author xuxueli 2015-12-19 19:43:36 */ @JobHandler(value="demoJobHandler") @Component public class DemoJobHandler extends IJobHandler { @Override public ReturnT<String> execute(String param) throws Exception { XxlJobLogger.log("XXL-JOB, Hello World."); for (int i = 0; i < 5; i++) { XxlJobLogger.log("beat at:" + i); TimeUnit.SECONDS.sleep(2); } return SUCCESS; } }
package com.example.test;
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication public class TestApplication {
public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); }
- logs ```text . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.21.RELEASE) 2019-09-03 09:37:15.606 INFO 11961 --- [ main] com.example.test.TestApplication : Starting TestApplication on localhost with PID 11961 (/Users/wangjg/Desktop/test/target/classes started by wangjg in /Users/wangjg/Desktop/test) 2019-09-03 09:37:15.610 INFO 11961 --- [ main] com.example.test.TestApplication : No active profile set, falling back to default profiles: default 2019-09-03 09:37:15.904 INFO 11961 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4ea5b703: startup date [Tue Sep 03 09:37:15 CST 2019]; root of context hierarchy 2019-09-03 09:37:17.265 INFO 11961 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http) 2019-09-03 09:37:17.301 INFO 11961 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2019-09-03 09:37:17.301 INFO 11961 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.40 2019-09-03 09:37:17.400 INFO 11961 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2019-09-03 09:37:17.400 INFO 11961 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1496 ms 2019-09-03 09:37:17.558 INFO 11961 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2019-09-03 09:37:17.564 INFO 11961 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2019-09-03 09:37:17.564 INFO 11961 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2019-09-03 09:37:17.565 INFO 11961 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2019-09-03 09:37:17.565 INFO 11961 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2019-09-03 09:37:17.624 INFO 11961 --- [ main] c.example.test.core.config.XxlJobConfig : >>>>>>>>>>> xxl-job config init. 2019-09-03 09:37:17.638 INFO 11961 --- [ main] c.xxl.job.core.executor.XxlJobExecutor : >>>>>>>>>>> xxl-job register jobhandler success, name:commandJobHandler, jobHandler:com.example.test.service.jobhandler.CommandJobHandler@6ec65b5e 2019-09-03 09:37:17.640 INFO 11961 --- [ main] c.xxl.job.core.executor.XxlJobExecutor : >>>>>>>>>>> xxl-job register jobhandler success, name:demoJobHandler, jobHandler:com.example.test.service.jobhandler.DemoJobHandler@263bbfeb 2019-09-03 09:37:17.640 INFO 11961 --- [ main] c.xxl.job.core.executor.XxlJobExecutor : >>>>>>>>>>> xxl-job register jobhandler success, name:httpJobHandler, jobHandler:com.example.test.service.jobhandler.HttpJobHandler@31edeac 2019-09-03 09:37:17.640 INFO 11961 --- [ main] c.xxl.job.core.executor.XxlJobExecutor : >>>>>>>>>>> xxl-job register jobhandler success, name:shardingJobHandler, jobHandler:com.example.test.service.jobhandler.ShardingJobHandler@67d86804 2019-09-03 09:37:17.668 INFO 11961 --- [ main] c.x.r.r.provider.XxlRpcProviderFactory : >>>>>>>>>>> xxl-rpc, provider factory add service success. serviceKey = com.xxl.job.core.biz.ExecutorBiz, serviceBean = class com.xxl.job.core.biz.impl.ExecutorBizImpl 2019-09-03 09:37:17.924 INFO 11961 --- [ Thread-8] com.xxl.rpc.remoting.net.Server : >>>>>>>>>>> xxl-rpc remoting server start success, nettype = com.xxl.rpc.remoting.net.impl.netty_http.server.NettyHttpServer, port = 9999 2019-09-03 09:37:18.103 INFO 11961 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4ea5b703: startup date [Tue Sep 03 09:37:15 CST 2019]; root of context hierarchy 2019-09-03 09:37:18.189 INFO 11961 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2019-09-03 09:37:18.190 INFO 11961 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 2019-09-03 09:37:18.230 INFO 11961 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2019-09-03 09:37:18.230 INFO 11961 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2019-09-03 09:37:18.274 INFO 11961 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2019-09-03 09:37:18.557 INFO 11961 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2019-09-03 09:37:18.586 INFO 11961 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 2019-09-03 09:37:18.592 INFO 11961 --- [ main] com.example.test.TestApplication : Started TestApplication in 3.405 seconds (JVM running for 4.243)
当用 此环境启动 客户端时,在配置类,可以正常读取到 application.yml 中的配置,并将配置信息正确配置到 XxlJobSpringExecutor 对象中,但是无法正常注册,但是如果把 application.yml 改为 application.properties 时,就可以正常注册
xxl.job.admin.addresses=http://127.0. 0.1:9090 xxl.job.executor.appname=xxl-job-executor-sample xxl.job.executor.port=9999
总之,很奇怪,望帮忙解答一下。。。
你好,可以debug看下相关配置有没有正确加载。
Which version of XXL-JOB do you using?
2.1.0
Expected behavior
spring boot 按照文档配置项目正常注册到调度中心
Actual behavior
当 spring boot 项目的配置文件是 application.yml 时,客户端日志显示注册成功,但是在调度中心界面显示注册的 executor 数量为 0 ,但是当 application.yml 换成 application.properties ,能够正常注册。
Steps to reproduce the behavior
pom.xml
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;
/**
@author xuxueli 2017-04-28 */ @Configuration public class XxlJobConfig { private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@Value("${xxl.job.admin.addresses}") private String adminAddresses;
@Value("${xxl.job.executor.appname}") private String appName;
// @Value("${xxl.job.executor.ip}") private String ip;
// @Value("${xxl.job.accessToken}") private String accessToken;
// @Value("${xxl.job.executor.logpath}") private String logPath;
// @Value("${xxl.job.executor.logretentiondays}") private int logRetentionDays;
}
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication public class TestApplication {
}
Other information
当用 此环境启动 客户端时,在配置类,可以正常读取到 application.yml 中的配置,并将配置信息正确配置到 XxlJobSpringExecutor 对象中,但是无法正常注册,但是如果把 application.yml 改为 application.properties 时,就可以正常注册
总之,很奇怪,望帮忙解答一下。。。