繁体   English   中英

使用java config在Spring应用程序的Web项目外部单独存储属性

Store properties separately outside the web project in Spring app using java config

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我想在Tomcat服务器中保存属性。 我想初始化一些bean进行开发,而另一些进行生产。 最好的解决方案是什么?

我尝试使用Condition接口,但收到NullPointerException。 似乎我没有从财产中获得价值。 我做错了什么?

我将属性文件放在/home/user/apache-tomcat-home-dir/conf/my.properties中并添加

 <Environment name="my_config" value="file:///${catalina.home}/conf/my.properties" type="java.net.URI"/>

/home/user/apache-tomcat-home-dir/conf/context.xml

my.properties中,只有一个属性:

profiler.default=dev

这就是我在项目中使用我的财产的方式:

public class ProductionCondition implements Condition {

    @Value("${profiler.default}")
    private String prodProfiler;

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        return prodProfiler.equals("production");
    }
}

public class DevCondition implements Condition {

    @Value("${profiler.default}")
    private String coreProfiler;

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
//        return coreProfiler.equals("dev");
        return context.getEnvironment().getProperty("profiler.default").contains("dev");
    }
}

比我应该配置PropertySourcesPlaceholderConfigurer从文件初始化属性:

@Configuration(value = "propertiesConfiguration")
@PropertySource(value="file:${catalina.home}/conf/my.properties")
public class PropertiesConfiguration {

    @Bean
    public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() throws MalformedURLException {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
//        configurer.setLocation(new FileSystemResource(propertyFile));
        return configurer;
    }
}

什么是正确的格式: $ {catalina.home}$ {catalina / home}或如何指定我的属性文件的相对路径?

在配置类中,我初始化条件Bean并指定此配置类取决于PropertiesConfiguration。

@Configuration
@Import({PropertiesConfiguration.class})
@DependsOn("propertiesConfiguration")
public class ApplicationConfig {

    @Bean
    @Conditional(ProductionCondition.class)
    public FooInterface productionVendorCore() {
        return new ProductionImpl();
    }

    @Bean
    @Conditional(DevCondition.class)
    public FooInterface devVendorCore() {
        return new DevImpl();
    }
//....
}

但是无论如何,我在ProductionCondition中收到了NPE:

return prodProfiler.equals("production");

感谢任何帮助!

1 个回复

与其尝试发明自己的轮子,不如尝试使用已经提供的轮子。 请改用个人资料

在您的tomcat中,只需将SPRING_PROFILES_ACTIVE属性添加到jndi即可,并带有您想要productiondev的值。 或者,您可以将其设置为环境或jvm属性。

<Environment name="SPRING_PROFILES_ACTIVE" value="production" type="java.lang.String"/>

然后使用@Profile注释您的bean定义,并为某些配置文件启用它们。

public class ApplicationConfig {

    @Bean
    @Profile("production")
    public FooInterface productionVendorCore() {
        return new ProductionImpl();
    }

    @Bean
    @Profile("dev")
    public FooInterface devVendorCore() {
        return new DevImpl();
    }
    //....
}

这仅应将bean装入已启用的概要文件中。 您无需任何其他工作。

1 使用Java Spring Boot的Azure App的多个web.config

我正在尝试使用azure门户来部署我的Java应用程序,并且该Java应用程序已配置为用于春季启动,因此使用了多个环境。 我们拥有application- {env} .properties文件,并使用-Dspring.profiles.active=prod或-Dspring.profile ...

3 在spring配置中使用Properties

我有一个属性配置取决于我的环境,如下所示: 现在我可以在项目中保留不同的属性文件,例如database.prod.properties或database.qual.properties 。 如果我用-Dmy.env = foobar启动我的应用程序,这样可以正常工作。 如果没有提 ...

4 使用Spring的Web App - 在Service中使用属性

我想从/ WEB-INF /文件夹中的比例文件加载少量值。 当我使用WebServices开发软件时,我通常在我的xml文件中使用它 然后使用以下方法访问Java中的值: 但它不适用于我的webapp,它总是返回null值。 ...

8 Spring Cloud Config Client 应用程序不使用 bootstrap.properties

我正在学习 Spring Cloud 的一些教程,并且在我的配置客户端应用程序中遇到了问题。 我有一台运行在 Linux 机器上的 Eureka 服务器,在我的 Mac 上,我有一个配置服务器,它正在向 Eureka 服务器正确注册。 我使用 spring 初始化程序生成了一个配置客户端应用程序。 ...

10 使用Spring MVC服务外部Web应用程序静态文件

我想要一个文件下载功能,基本上使用Spring MVC来提供文件。 当我查看文档时,所有示例都与在Web应用程序中提供文件有关。 Spring MVC框架是否支持提供Web应用程序外部的静态内容? 或者我们还有其他使用spring的替代选择吗? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM