Spring在解析占位符之前查看默认值

时间:2015-03-02 18:14:25

标签: java xml spring configuration spring-integration

我一直在寻找与我类似的问题,但却无法找到。因此,我希望它不是一个重复的帖子。

那么, 我使用spring集成来搜索我的mongodb中的文档。一旦找到一个,它就会将有效负载发送到另一个方法。 我有一个属性文件,我想在这个查找和发送配置上解析,所以我使用占位符而不是静态值。

这是我的xml:

<int:inbound-channel-adapter id="sendClientMailInboundAdapter"
            expression="@repository.findClient()"
            channel="sendClientMailChannel"
            auto-startup="${send.mail.active:false}">
            <int:poller fixed-rate="${send.mail.poller.time:60}" time-unit="SECONDS" max-messages-per-poll="1" />
        </int:inbound-channel-adapter>

        <int:channel id="sendClientMailChannel" />

        <int:service-activator input-channel="sendClientMailChannel" expression="@service.sendClientMail(payload)" />

右。 现在..我有一个加载属性文件的AppConfig类。

@Configuration
@PropertySource("file://${appconfig.root}/appconfig.properties")
public class AppConfig {

    public static Environment env;
    ...

    @Bean
    public static PropertySourcesPlaceholderConfigurer appConfigConfigurer(Environment env) {
        AppConfig.env = env;
        PropertySourcesPlaceholderConfigurer appConfigConfigurer = new PropertySourcesPlaceholderConfigurer();
        appConfigConfigurer.setIgnoreUnresolvablePlaceholders(true);
        appConfigConfigurer.setIgnoreResourceNotFound(true);
        return appConfigConfigurer;
    }
}

所以..我的问题是默认值。 如果我没有指定默认值,spring会解析占位符。但是,如果它被指定,那么看起来春天会忽略占位符(也许它不会等待它解决)并改为设置默认值!

我可以使用context:property-placeholder location。我已经完成了它并且它有效,但由于我已经在我的配置类上加载了该文件,我宁愿从那里获得弹簧读取属性,所以我不必记得调整两个文件以防属性文件更改其文件夹。

我的问题:在查看默认值之前,有没有办法告诉spring等待占位符解决?

编辑:只是让人们知道..我将xml更改为java配置,使用占位符/默认值,就像之前一样,它完美无缺。

以下是等效代码段:

@InboundChannelAdapter(value = "sendClientMailChannel", autoStartup="${send.mail.active:false}",
                            poller = @Poller(fixedRate="${send.mail.poller.time.in.millis:60000}", maxMessagesPerPoll="1"))
public Client findClient() {
    return repository.findClient();
}

@ServiceActivator(inputChannel="sendClientMailChannel")
public void sendToClient(Client payload) {
    service.sendClientMail(payload);
}

@Bean
public DirectChannel sendClientMailChannel() {
    return new DirectChannel();
}

注意:我没有必要引用属性文件。

0 个答案:

没有答案