如何通过Java代码中的SpEL表达式选择Tomcat context.xml参数

时间:2016-11-04 00:54:07

标签: java xml spring tomcat spring-el

我正在尝试通过SpEL expresseion获取context.xml参数,但我得到null

我的代码是

public class DatabaseProperties extends PropertyPlaceholderConfigurer {

    @Value("#{'${myConfigDirectory}'}")
    private String dbConfigPath;

    @Override
    protected void loadProperties(Properties props) throws IOException 
        Resource location = new FileSystemResource("/spring-data-access.properties");
        System.out.println("DB CONFIG PATH "+dbConfigPath);
        System.out.println("DB LOCATION + "+location.getFile().getAbsolutePath());
        setLocation(location);
        super.loadProperties(props);
    }
}

此处dbConfigPath始终为null

我的配置文件位于.xml。这是

<bean id="propertyConfigurer" class="com.properties.DatabaseProperties">
    <property name="ignoreResourceNotFound" value="true"/>
</bean>

我需要这样做,以便在部署war时,它应该使用在&context;上下文中定义的parameter来挑选来自外部战争的属性。在dev时,它应该从resource文件夹中选择。

1 个答案:

答案 0 :(得分:1)

你不需要扩展PropertyPlaceholderConfigurer,只需在配置中声明一个bean。

@Configuration
@PropertySource(
          value={"classpath:/spring-data-access.properties"},
          ignoreResourceNotFound = true)
public class Config {

    @Value("${myConfigDirectory}}")
    private String dbConfigPath;
    /**
     * Property placeholder configurer needed to process @Value annotations
     */
     @Bean
     public static PropertySourcesPlaceholderConfigurer propertyConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
     }
}