L'évaluation des propriétés à l'intérieur de Printemps Expression Lang (SpEL)
Notre service a un processus qui est prévu selon un fichier de propriétés, la lecture de la propriété refreshIntervalMillis. Sa valeur est injecté directement dans un Quartz de déclenchement avec cette configuration:
<bean name="trigger"
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean "
p:repeatInterval="${refreshIntervalMillis}">
...
</bean>
Cependant, les admins que d'installer ce service de penser en termes d'heures ou de jours, afin de rendre la chose plus facile pour eux, nous avons changé cela:
- Renommé refreshIntervalMillis à refreshIntervalMinutes
- Changé de code ci-dessus pour les éléments suivants:
p:repeatInterval="#{ 1000 * 60 * T(java.lang.Integer).valueOf(@configurationProperties['garbageLevelWatcher.refreshIntervalMinutes'])}"
Remarque: les propriétés de l'objet est exposé comme un bean nommé "configurationProperties"
Est-il une syntaxe plus simple pour faire de même?
Merci,
OriginalL'auteur Sebastian | 2013-03-19
Vous devez vous connecter pour publier un commentaire.
"#{T(java.util.concurrent.TimeUnit).MINUTES.toMillis( @configurationProperties['garbageLevelWatcher.refreshIntervalMinutes'])}"
EDIT:
Ou...
et
Juste que c'est pratique les méthodes de conversion - pas besoin de "1000 * 60" - l'OP demandé syntaxe plus simple. TimeUnit est un enum avec tout un tas de méthodes de conversion. Lors de l'évaluation de l'expression est totalement indifférent à cette discussion.
Gary, astuce sympa, j'ai oublié TimeUnit méthodes. J'ai upvoted votre réponse. Je vais garder la question ouverte pour quelques jours d'attente pour plus d'idées pour faire encore plus simple, c'est à dire. peut-on mettre des MINUTES et des propriétés du contexte, de sorte qu'il nous suffit d'écrire "#{MINUTES.toMillis(${garbageLevelWatcher.refreshIntervalMinutes})}" (idéalement...)
J'ai édité ma réponse avec un autre; si vous avez un commun <import/> fichier, vous pouvez mettre la constante.
Excellent! merci.
OriginalL'auteur Gary Russell
Si les propriétés sont examinés par un PropertyPlaceholderConfigurer, @PropertySource ou <contexte:propriété de l'espace réservé />, et le contexte est conscient de cela,
Vous pouvez l'écrire comme ceci:
Comme je sais que c'est automatiquement conscience
le contexte de la propriété de l'espace réservé juste besoin d'être défini dans le application-context.xml contrairement à l'webmvc-context.xml qui met en place le contexte web-
OriginalL'auteur emd