2017-09-29 3 views
0

Je veux avoir une procédure d'o action appelée périodiquement une fois par jour sans qu'il soit nécessaire d'avoir quelqu'un connecté.Grails, faire une action appelée à plusieurs reprises une fois par jour, semaine, etc

Est-ce possible et si elle est : Comment puis-je le faire?

Ceci est mon Trigger:

package com.myproj.jobs 


class DailyCheck { 
    static triggers = { 
//  cron name: 'dailyCheck', cronExpression: "03 * * * * ?" 
      simple name: 'myJobSimple', repeatInterval: 6000 
    } 


def dailyCheckService 
def execute() { 
    println(">>>>>>>>> DAILY JOB EXECUTES <<<<<<<") 
    dailyCheckService.checkOffers() 
} 

}

Une partie de mon build.gradle:

dependencies { 
compile "org.springframework.boot:spring-boot-starter-logging" 
compile "org.springframework.boot:spring-boot-autoconfigure" 
compile "org.grails:grails-core" 
compile "org.springframework.boot:spring-boot-starter-actuator" 
compile "org.springframework.boot:spring-boot-starter-tomcat" 
compile "org.grails:grails-dependencies" 
compile "org.grails:grails-web-boot" 
compile "org.grails.plugins:cache" 
compile "org.grails.plugins:scaffolding" 
compile "org.grails.plugins:hibernate5" 
compile "org.hibernate:hibernate-core:5.1.2.Final" 
compile "org.hibernate:hibernate-ehcache:5.1.2.Final" 
console "org.grails:grails-console" 
compile 'org.grails.plugins:quartz:2.0.12' 
profile "org.grails.profiles:web" 
runtime "com.bertramlabs.plugins:asset-pipeline-grails:2.11.6" 
runtime "com.h2database:h2" 
testCompile "org.grails:grails-plugin-testing" 
testCompile "org.grails.plugins:geb" 
testRuntime "org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1" 
testRuntime "net.sourceforge.htmlunit:htmlunit:2.18" 
runtime 'net.sourceforge.jtds:jtds:1.3.1' 
compile "ca.redtoad:grails-phonenumbers:0.11" 
compile 'org.grails.plugins:spring-security-core:3.1.1' 
compile 'org.grails.plugins:spring-security-ui:3.0.0.M2' 
compile 'org.grails.plugins:database-migration:3.0.0' 
compile 'org.liquibase:liquibase-core:3.5.3' 
compile 'org.grails.plugins:rendering:2.0.3' 
runtime "org.springframework:spring-test:4.2.1.RELEASE" 
compile "org.grails.plugins:excel-export:2.1" 

}

+1

Il y a un plugin à quartz pour n'importe quelle version de grails que vous utilisez – cfrick

+0

Fine Je vais vérifier cela. J'utilise Grails-3.2.3. – larand

Répondre

0

Ce problème a été résolu en ajoutant un fichier de configuration dans Grails-app/QuartzConfig.groovy nommé conf ayant le contenu suivant:

quartz { 
    autoStartup = true 
    jdbcStore = false 
} 
environments { 
    test { 
    quartz { 
     autoStartup = false 
    } 
    } 
} 

Et à Mike WI ajoutera qu'il n'y a toujours pas de diag art donc il aurait pu être emporté avec cette dernière version?

1

Vous pouvez utiliser par exemple quartz plugin

build.gradle

dependencies { 
    compile 'org.grails.plugins:quartz:2.0.12' 
} 

/grails-app/jobs/MyJob.groovy

class MyJob{ 
    static triggers = { 
     // fire every day at 12:30 
     cron name: 'myJobCron', cronExpression: "0 30 12 * * ?" 
    } 

    def myService 

    def execute(context) { 
     myService.doStuff() 
    } 
} 
+0

Vraiment aussi simple? Je vais prendre un moment avant d'avoir des résultats. Merci! – larand

+0

Eh bien, il semble qu'il ne s'exécute jamais, comme je suis en train de tester je cours en mode développement et je comprends que j'ai besoin de configurer le plugin, mais il n'y a pas de fichier de configuration à modifier. J'ai aussi essayé "grails install-quartz-config" mais les grails ne trouvent pas cette commande. – larand

+0

Vous n'avez pas besoin d'ajouter de configuration sauf si vous voulez un contrôle précis de certains aspects, à quoi avez-vous changé votre calendrier cron? Vous pouvez utiliser un déclencheur simple, par ex. ceci qui se déclenchera toutes les 60 secondes 'nom simple: 'myJobSimple', repeatInterval: 6000000', ajoutez-le au bloc des triggers et commentez l'horaire cron –