2016-09-07 1 views
2

Я хочу разработать автономное приложение, которое выполнит некоторую задачу по расписанию. Для этого я использую spring @scheduled и taskcheduler. Я не могу использовать загрузку пружины, как это необходимо весна 4. * и мой Maven проект имеет зависимости от других проектов, которые используют весной 3. Вот мой код (reference):Как запустить запланированное задание Spring с использованием исполняемого баночного ящика

pom.xml:

<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> 
<parent> 
    <groupId>com.pdp.ci</groupId> 
    <artifactId>ci</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
</parent> 
<artifactId>file-requester</artifactId> 
<name>file-requester</name> 
<packaging>jar</packaging> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <java.version>1.7</java.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>com.pdp.ci</groupId> 
     <artifactId>common-requester</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.apache.httpcomponents</groupId> 
       <artifactId>httpclient</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.apache.httpcomponents</groupId> 
       <artifactId>httpcore</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpclient</artifactId> 
     <version>4.4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpcore</artifactId> 
     <version>4.4.4</version> 
    </dependency> 
</dependencies> 

<build> 
<plugins> 
<plugin> 
    <!-- Build an executable JAR --> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>3.0.2</version> 
    <configuration> 
    </configuration> 
</plugin> 

<plugin> 
<artifactId>maven-dependency-plugin</artifactId> 
<executions> 
    <execution> 
    <phase>install</phase> 
     <goals> 
     <goal>copy-dependencies</goal> 
     </goals> 
     <configuration> 
     <outputDirectory>${project.build.directory}/lib</outputDirectory> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 
</plugins> 
</build> 
</project> 

компонентный класс, содержащий по расписанию метод: класс

package com.ci.ias; 

@Component 
public class CustomRequester{ 

    @Scheduled(fixedRate=2000) 
    public void processFiles(){ 
     logger.info("Process started"); 
     //task logic 
    } 
} 

Конфигурация:

@Configuration 
@EnableScheduling 
@ComponentScan(basePackages="com.ci.ias") 
public class Requester implements SchedulingConfigurer { 

    @Override 
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { 
     taskRegistrar.setScheduler(taskExecutor()); 
    } 

    @Bean(destroyMethod="shutdown") 
    public Executor taskExecutor() { 
     return Executors.newScheduledThreadPool(100); 
    } 

} 

Я могу построить банку. Но не может работать, поскольку нет «основного» метода. Как запустить этот планировщик с помощью командной строки? Я новичок в этом. Кто-нибудь может объяснить, как это работает?

Спасибо.

ответ

1

, если у вас есть весна-загрузочная банка (кажется любит ваш родитель баночка содержит зависимости от пружинной загрузки)

весна-ботинки:

@SpringBootApplication 
public class Application { 

    public static void main(String[] args) { 
     ApplicationContext ctx = SpringApplication.run(Application.class, args); 


    } 

} 

ява -jar yourjar.jar

Или просто создайте основной метод и позвоните этому классу

public class AppMain { 

    @SuppressWarnings({ "unused", "resource" }) 
    public static void main(String args[]){ 
     AbstractApplicationContext context = new AnnotationConfigApplicationContext(Requester.class); 
    } 

} 

Затем вы можете добавить этот главный класс в своем манифесте

manifest.mf

Manifest-Version: 1.0 
 
Main-Class: com.example.MainClass 
 
Class-Path: anyjarsneededtorunapp.jar

Вызов Java -jar yourjar.jar