2016-04-21 13 views
0

Ich habe erreicht, CronExpression von einer Propery-Datei konfigurieren, aber diese Eigenschaft Datei ist apache-deltaspike.properties, die innerhalb der JAR-Datei ist. Ich brauche den Cron-Ausdruck aus meiner benutzerdefinierten Config-Datei zu übernehmen:Deltaspike + Quartz + CronExpressions von benutzerdefinierten Eigenschaftendatei

import org.apache.deltaspike.core.api.config.PropertyFileConfig; 

public class myOwnPropertyFileConfig implements PropertyFileConfig { 
    private static final long serialVersionUID = 1L; 

    @Override 
    public String getPropertyFileName() { 
    return "cfg/myOwnPropFile.properties"; 
    } 

    @Override 
    public boolean isOptional() { 
    return false; 
    } 

} 

myOwnPropFile.properties

deltaspike_ordinal=500 
property1=value1 
property2=value2 
QuartzJob=0 25 17 * * ? 

den Job:

@Scheduled(cronExpression = "{QuartzJob}") 
public class MyQuartzJob implements Job { 
    //job code 
} 

Alles geht gut, wenn ich diese Eigenschaft: QuartzJob = 0 25 17 * *? innerhalb apache-deltaspike.properties, aber wenn ich es in meiner eigenen Eigenschaftendatei festgelegt, die ich erhalte:

java.lang.IllegalStateException: No config-value found for config-key: QuartzJob 

Forschung, fand ich, dass mein Eigentum Datei direkt nach dem Quarz-Initialisierung geladen wird, und das erklärt, warum die. Jetzt lese ich in Deltaspike doc, dass es möglich ist, meine Eigenschaftendatei zu laden, wann immer ich will, indem ich deltaspike_ordinal in meiner Eigenschaftendatei verwende. Also habe ich es versucht, aber es scheint die deltaspike_ordinal = 500 zu ignorieren, und der Fehler tritt immer wieder auf.

Also, weiß jemand, wie man das aussortiert? Deltaspike doc spricht auch über eine ConfigSource und so, aber es ist nicht so klar und es gibt keine Beispiele.

Vielen Dank im Voraus!

Antwort

1

Verstanden. Der Schlüssel war in die javadoc von PropertyFileConfig aussehen:

  1. Automatische Pickup über java.util.ServiceLoader Mechanismus Falls Sie eine EAR oder müssen Sie die bereits konfigurierten Werte während des CDI Container Start dann können Sie auch die PropertyFileConfig über den java.util.ServiceLoader-Mechanismus registrieren. Damit diese Konfiguration nicht zweimal abgerufen wird, müssen Sie Ihre eigene PropertyFileConfig Implementierung mit org.apache.deltaspike.core.api.exclude.Exclude kommentieren.

Der ServiceLoader Mechanismus erfordert eine Datei META-INF/services/org.apache.deltaspike.core.api.config.PropertyFileConfig mit dem vollständig qualifizierten Klassennamen der eigenen PropertyFileConfig Implementierungsklasse zu haben.
com.acme.my.own.SomeSpecialPropertyFileConfig Die Umsetzung wird wie folgt aussehen:

@Exclude 
    public class SomeSpecialPropertyFileConfig implements PropertyFileConfig  { 
     public String getPropertyFileName() { 
      return "myconfig/specialconfig.properties" 
     } 
     public boolean isOptional() { 
      return false; 
     } 
    } 

Arbeitete wie ein Charme