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 修改就可以了

 

posted @ 2018-11-18 15:50  toov5  阅读(10433)  评论(0编辑  收藏  举报