2016-05-09 19 views
4

Ich verwende Spring Boot und Probleme haben, eine cron task Planung mit Werten in der Datenbank vorhanden.Spring Boot: Erhalten @ Scheduled Cron-Wert aus der Datenbank

einstweilen, lese ich Werte von Eigenschaften wie unter Datei:

@Scheduled(cron= "${time.export.cron}") 
public void performJob() throws Exception { 
    // do something 
} 

Das funktioniert gut, sondern Werte des Erhaltens von Properties-Datei, ich möchte, dass sie aus der Datenbank-Tabelle erhalten. Ist es möglich und wie?

+0

Für das Frühjahr ist es egal, wo die Eigenschaften kommen, Dateien, Datenbank, git, solange sie am Ende ist Eigenschaften. –

+1

Ich habe versucht, eine Methode zu implementieren, die Zeichenfolgenwert aus der Datenbank holt und versucht, diese Zeichenfolge in @Scheduled einzufügen, aber es heißt: Der Wert für das Annotationsattribut Scheduled.cron muss ein konstanter Ausdruck sein – Daniel

+0

Sie müssen nichts am ändern '@ Scheduled' müssen Sie nur die Eigenschaften aus der Datenbank abrufen und sie an den 'context: property-placeholder' übergeben. Wenn Sie java config verwenden, verwenden Sie einen' ApplicationContextInitializer', um eine 'PropertySource' hinzuzufügen. –

Antwort

0

Um Ihre Ziele zu erreichen, müssen Sie Ihren Scheduler zur Laufzeit konfigurieren. Das bedeutet, dass Sie eine schedule-API auf niedriger Ebene verwenden müssen. Wenn Sie bereits eine Verbindung mit Ihrer Datenbank vorbereitet haben, können Sie Ihren Scheduler konfigurieren. Ich denke, Sie müssen @Scheduled Annotation loswerden und Ihren Scheduler manuell verwalten.

denke ich, diese Themen beschreiben helfen kann, was ich meine:

  1. How to change Spring's @Scheduled fixedDelay at runtime

  2. Scheduling a job with Spring programmatically (with fixedRate set dynamically)

jedoch immer können Sie wilde Ansätze verwenden, wo Sie die Bohne abfangen würde Erstellen und ersetzen Sie die ursprüngliche Anmerkung in der Annotation durch benutzerdefinierte Metadaten, aber um sie zu implementieren, müssen Sie viele Frames kennen k Details und wie @Scheduled Annationation Prozessor funktioniert.

1

Sie müssen Eigenschaften aus der Datenbanktabelle laden, in der Ihr Wert gespeichert ist. und fusioniert, dass die DB-Eigenschaften mit Anwendungseigenschaften

@Autowired 
    private DataSource dataSource; 

    @Autowired 
    private DatabaseConfiguration configuration; 

    @Bean(name = "propertyConfig") 
    public DatabaseConfiguration getDatabaseConfiguration() { 
     DatabaseConfiguration configuration = new DatabaseConfiguration(dataSource, "propertyTable", "key", "value"); 
     return configuration; 
    } 

    @Bean(name = "dbProperty") 
    public Properties getDBProperties(){ 
     Properties properties = ConfigurationConverter.getProperties(configuration); 
     return properties; 
    } 

Weitere Hilfe finden https://analyzejava.wordpress.com/2015/01/16/loading-configuration-properties-from-database-in-spring-based-application/