在依赖jar中的application-context.xml中的Spring属性占位符

时间:2017-06-07 13:30:38

标签: spring spring-boot property-placeholder

对于我的春季启动应用程序,我使用基于注释的配置和WebApplicationInitalizer

我的一个依赖项提供了一个包含在jar中的xml中的spring配置。我使用@ImportResource加载上下文xml。这似乎有效,除了在这个xml中有属性占位符这一事实,例如${poolsize:10}

显然,spring不会自动替换这些占位符(我得到NumberFormatException)。我需要添加一些额外的配置吗?

我们的创业课程:

public class Application implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext container) throws ServletException {
        // Create the 'root' Spring application context
        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();

        // config
        rootContext.register(JmsConfiguration.class);

        // Manage the lifecycle of the root application context
        container.addListener(new ContextLoaderListener(rootContext));
    }

}

配置类(我们使用spring-jms):

@Configuration
@EnableJms
@ComponentScan(basePackages = { "..." })
public class JmsConfiguration implements JmsListenerConfigurer {
       // config for jms listener and jaxb, nothing to do with property handling
}

也许我错误地认为使用WebapplicationInitializer是如何使用spring boot。也许我们甚至不需要弹簧靴?我们使用的唯一与spring boot相关的依赖是:

<dependency>
    <!-- Import dependency management from Spring Boot -->
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>1.5.3.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

我们使用的Spring依赖项:

org.springframework:spring-context:jar:4.3.8.RELEASE:compile
org.springframework:spring-jms:jar:4.3.8.RELEASE:compile
org.springframework:spring-oxm:jar:4.3.8.RELEASE:compile
org.springframework:spring-context:jar:4.3.8.RELEASE:compile
org.springframework:spring-beans:jar:4.3.8.RELEASE:compile

1 个答案:

答案 0 :(得分:0)

我想通了@M。 Deinum

我们不需要弹簧启动来使用WebApplicationInitializer,但是(至少没有弹簧启动)我们必须声明我们自己的PropertySourcesPlaceholderConfigurer

@Configuration
@ImportResource(locations = {"classpath*:/library-context.xml"})
public class MyConfiguration {

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }

}

NB。由于@EnableAutoConfiguration@PropertyPlaceholderAutoConfiguration包含完全相同的PropertySourcesPlaceholderConfigurer bean

,因此在春季启动时开箱即用