2017-02-21 4 views
0

У меня есть метод, и я хочу добавить задачу планировщика. Проблема в том, что у меня есть некоторые входные параметры, и мне нужно вызвать этот метод с помощью этих параметров. Там в любом случае?Как определить входной параметр для весеннего кварца targetMethod?

вот мой метод;

public class RunMeTask { 
    public void printMe(List<StudentType> myList) { 
     System.out.println("test"); 
    } 
} 

public enum StudentType{ 
    SENIOR, 
    GRADUATE 
} 

Бобы;

<bean id="runMeJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
    <property name="targetObject" ref="runMeTask" /> 
    <property name="targetMethod" value="printMe" /> 
</bean> 

<bean id="runMeCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> 
    <property name="jobDetail" ref="runMeJob" /> 
    <property name="cronExpression" value="0 0/10 * * * ?" /> 
</bean> 

EDIT: Я обнаружил, что я могу добавить новое свойство аргументы, но я получаю ClassCastException, как и ожидалось. Мне нужно отправить List of StudentType вместо List of String.

java.lang.String cannot be cast to dr.domain.StudentType 

<property name="arguments"> 
    <list> 
     <list> 
     <value>SENIOR</value> 
     </list> 
    </list> 
</property> 
+0

Где вы принимаете эти параметры? – cralfaro

+0

@cralfaro Параметры постоянны. Я имею в виду, что runMeJob всегда будет вызывать метод printMe с SENIOR. – hellzone

ответ

0

Свойство "arguments" - это список аргументов для вызова метода. Но ваш первый аргумент - это сам список. Поэтому вам нужно иметь список списков. Попробуйте

<property name="arguments"> 
    <list> 
     <list> 
      <value type="com.your.package...StudentType">SENIOR</value> 
     </list> 
    </list> 
</property> 
+0

спасибо за вашу помощь, но я до сих пор не знаю, как вызвать этот метод с перечислением. – hellzone

+0

@hellzone Просто пойдите в Google. например http://stackoverflow.com/questions/16174277/spring-how-do-inject-enum-in-spring-configuration-with-generics, обновленный ответ для вас. Другое решение - не используйте Spring;) Конфигурация XML - это кошмар – kan

0

Вы могли бы использовать этот подход

Определение списка, который будет загружен со значениями из файла свойств.

public class RunMeTask { 
    @Value("#{'${arguments}'.split(',')}") 
    private List<String> myList; 

    @Schedule(...) 
    public void printMe() { 
     //here you can convert your String list to Enum. Not sure if you can directly load the enums in the list from the properties file 
     System.out.println("test"); 
    } 
} 

В ваших application.properties

arguments=SENIOR,JUNIOR 

Update:

Как вы сказали, что вы не можете использовать свойства файла или строки. Тогда вы могли бы взглянуть на эту ссылку, объясните неплохо, как это сделать.

Quartz programmatically adding parameters

+0

Я не могу использовать класс String. Это запрещено мне. И я не могу использовать файл свойств. – hellzone

+0

@hellzone взгляните на обновление, я добавил одну ссылку, где объясню, как это сделать, но это изменит ваш первый класс, теперь вам нужно будет создать компонент, где программным образом вы определяете триггер cron, и вы сможете добавьте все необходимые параметры. Но больше не использовать аннотацию Scheduler – cralfaro