• Spring Boot2.0之 整合XXL-Job


    参考git上面的 springboot demo

    创建maven工程:

    pom:

    <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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.toov5</groupId>
      <artifactId>springboot-xxl-job</artifactId>
      <version>0.0.1-SNAPSHOT</version>
       
      	<properties>
    		<javax.servlet-api.version>3.0.1</javax.servlet-api.version>
    		<jsp-api.version>2.2</jsp-api.version>
    
    		<spring.version>4.3.14.RELEASE</spring.version>
    		<jackson.version>2.9.4</jackson.version>
    		<aspectjweaver.version>1.8.13</aspectjweaver.version>
    		<slf4j-api.version>1.7.25</slf4j-api.version>
    		<freemarker.version>2.3.23</freemarker.version>
    		<junit.version>4.12</junit.version>
    
    		<jetty-server.version>9.2.24.v20180105</jetty-server.version>
    		<hessian.version>4.0.51</hessian.version>
    		<httpclient.version>4.5.5</httpclient.version>
    		
    		<commons-exec.version>1.3</commons-exec.version>
    		<commons-collections4.version>4.1</commons-collections4.version>
    		<commons-lang3.version>3.7</commons-lang3.version>
    		<commons-email.version>1.5</commons-email.version>
    
    		<c3p0.version>0.9.5.2</c3p0.version>
    		<mysql-connector-java.version>5.1.45</mysql-connector-java.version>
    		<mybatis-spring.version>1.3.1</mybatis-spring.version>
    		<mybatis.version>3.4.5</mybatis.version>
    
    		<groovy-all.version>2.4.13</groovy-all.version>
    		<quartz.version>2.3.0</quartz.version>
    
    		<spring-boot.version>1.5.10.RELEASE</spring-boot.version>
    	</properties> 
      <dependencyManagement>
    		<dependencies>
    			<dependency>
    				<!-- Import dependency management from Spring Boot (依赖管理:继承一些默认的依赖,工程需要依赖的jar包的管理,申明其他dependency的时候就不需要version) -->
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-starter-parent</artifactId>
    				<version>${spring-boot.version}</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    
    			<!-- jetty -->
    			<dependency>
    				<groupId>org.eclipse.jetty</groupId>
    				<artifactId>jetty-server</artifactId>
    				<version>${jetty-server.version}</version>
    			</dependency>
    			<dependency>
    				<groupId>org.eclipse.jetty</groupId>
    				<artifactId>jetty-util</artifactId>
    				<version>${jetty-server.version}</version>
    			</dependency>
    			<dependency>
    				<groupId>org.eclipse.jetty</groupId>
    				<artifactId>jetty-http</artifactId>
    				<version>${jetty-server.version}</version>
    			</dependency>
    			<dependency>
    				<groupId>org.eclipse.jetty</groupId>
    				<artifactId>jetty-io</artifactId>
    				<version>${jetty-server.version}</version>
    			</dependency>
    
    		</dependencies>
    	</dependencyManagement>
    
    	<dependencies>
    		<!-- spring-boot-starter-web (spring-webmvc + tomcat) -->
    		<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>1.9.2-SNAPSHOT</version>
    		</dependency>
    
    	</dependencies>
    
    	<build>
    		<plugins>
    			<!-- spring-boot-maven-plugin (提供了直接运行项目的插件:如果是通过parent方式继承spring-boot-starter-parent则不用此插件) -->
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    				<version>${spring-boot.version}</version>
    				<executions>
    					<execution>
    						<goals>
    							<goal>repackage</goal>
    						</goals>
    					</execution>
    				</executions>
    			</plugin>
    		</plugins>
    	</build>
      
      
      
    </project>
    

       controller

    注:

    ### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
    xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin

    是调度中心的地址

     修改job名字:与注解一致

    config  通过config这个类 读取properties中的信息 然后注入到spring boot 容器中

    项目结构:

    Icontroller (做spring boot测试用的)

    package com.toov5.api.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class IndexController {
       @RequestMapping("/index")
       public String index() {
           return "ok";
       }
    }

    config (读取 properties文件 并且注入到spring 容器中的)

    package com.toov5.job.executor.core.config;
    
    import com.xxl.job.core.executor.XxlJobExecutor;
    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.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * xxl-job config
     *
     * @author xuxueli 2017-04-28
     */
    @Configuration
    @ComponentScan(basePackages = "com.xxl.job.executor.service.jobhandler")
    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 XxlJobExecutor xxlJobExecutor() {
            logger.info(">>>>>>>>>>> xxl-job config init.");
            XxlJobExecutor xxlJobExecutor = new XxlJobExecutor();
            xxlJobExecutor.setAdminAddresses(adminAddresses);
            xxlJobExecutor.setAppName(appName);
            xxlJobExecutor.setIp(ip);
            xxlJobExecutor.setPort(port);
            xxlJobExecutor.setAccessToken(accessToken);
            xxlJobExecutor.setLogPath(logPath);
            xxlJobExecutor.setLogRetentionDays(logRetentionDays);
    
            return xxlJobExecutor;
        }
    
    }

     Job

    package com.toov5.TestJob;
    
    import org.springframework.stereotype.Component;
    
    import com.xxl.job.core.biz.model.ReturnT;
    import com.xxl.job.core.handler.IJobHandler;
    import com.xxl.job.core.handler.annotation.JobHandler;
    
    
    @JobHandler(value="myJob")
    @Component
    public class MyJob extends IJobHandler {
         @Override
        public ReturnT<String> execute(String param) throws Exception {
            System.out.println("XXL-Job传递的参数是:"+param);
            return SUCCESS;
        }
    }

     logback:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="false" scan="true" scanPeriod="1 seconds">
    
        <contextName>logback</contextName>
        <property name="log.path" value="/data/applogs/xxl-job/xxl-job-executor-sample-springboot.log"/>
    
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
           <!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter" >
                <level>WARN</level>
            </filter>-->
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${log.path}</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
            </rollingPolicy>
            <encoder>
                <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
                </pattern>
            </encoder>
        </appender>
    
        <root level="info">
            <appender-ref ref="console"/>
            <appender-ref ref="file"/>
        </root>
    
        <!--<logger name="com.xxl.job.executor.service.info" level="WARN" additivity="false">
            <appender-ref ref="console"/>
            <appender-ref ref="file"/>
        </logger>-->
    
    </configuration>
    

      

    启动admin的server,然后启动job的spring boot

    运行成功:

     

     相关配置 入config 、 logback application.properties 参考github上的demo 修改就可以了

  • 相关阅读:
    mormot2封装tcp
    mormot.net.client.pas
    mormot.net.server.pas
    delphi working with big data databases in Cassandra, Couchbase and MongoDB
    Grijjy.ProtocolBuffers.pas
    Grijjy.Bson.Serialization.pas
    GrijjyFoundation开源框架
    Unidac内存表使用
    传统关系型数据库正在完成华丽的蜕变
    使用arthas 分析java 应用的一个流程总结
  • 原文地址:https://www.cnblogs.com/toov5/p/9978162.html
Copyright © 2020-2023  润新知