首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Spring的main()方法期间或之前访问.properties文件中的属性?

如何在Spring的main()方法期间或之前访问.properties文件中的属性?
EN

Stack Overflow用户
提问于 2020-04-10 05:21:58
回答 2查看 57关注 0票数 0

我们已经将现有的web应用程序转换为Spring Boot。

我想做的就是能够使用@Profile("production")。我们将其存储在资源文件夹中的myProps.properties中。

我可以使用@Value在整个应用程序中访问.properties文件,但似乎为了让@Profile正常工作,您必须在ServletContext /final被设置之前设置活动的Profile,这似乎发生在main()方法中。

我试过很多方法,但都失败了。我发现您不能在主应用程序类中使用@Value设置静态字段。我曾尝试创建一个实现WebApplicationInitializer的类,比如https://www.baeldung.com/spring-profiles,但我覆盖的onStartup()方法从未运行过。我设置了一个断点,但它永远不会被击中。我唯一可以获得中断点的方法是,如果我在该方法上@Autowire,但是上下文已经设置,不能更改。

我试过AnnotationConfigWebApplicationContext,我试过ServletContainerInitializer,我试过ConfigurableEnvironment,等等。我觉得我好像在兜圈子。

我觉得为了用"Spring way“做事情,我在这里遗漏了一个很大的部分。有没有人可以提供Java注解配置的方式,让我获得一个属性并设置活动配置文件,以便稍后在产品中使用?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-04-10 05:34:26

为什么在main之前需要它?为什么不创建多个属性文件并在顶级属性文件中定义概要文件呢?

(父级) application.properties

代码语言:javascript
复制
spring.profiles.active = development-application.properties

(配置文件)开发-application.properties

代码语言:javascript
复制
my.value = foo
票数 0
EN

Stack Overflow用户

发布于 2020-04-10 08:19:32

根据您的评论,我建议以下内容作为解决方案:

使用@Component将您的任务定义为bean,并使用@Profile对它们进行注释,以便根据您希望在其中使用它们的环境对它们进行划分(我更喜欢将配置文件设置为环境变量)。

代码语言:javascript
复制
@Component
@Profile("production")
public class TaskA implements Task {
    public void doWork(){}
}

@Component
@Profile("staging")
public class TaskB implements Task {
    public void doWork(){}
}

使用@Component标记这些类意味着Spring将管理它们,并且可以将它们注入到执行任务的@Component中:

代码语言:javascript
复制
@Component
public class TaskDoer {
    private List<Task> tasksToDo;
    @Inject
    public TaskDoer(List<Task> tasksToDo) {
        this.tasksToDo = tasksToDo;
    }
}

在部署应用程序时,以适合您的设置的方式在环境变量中设置要使用的配置文件:

代码语言:javascript
复制
SPRING_PROFILES_ACTIVE = production, someOtherProfile

现在,当应用程序启动时,Spring将看到活动的配置文件是"production“和"someOtherProfile”(可以设置多个配置文件),并且不会加载任何不是该配置文件的@Profile的bean。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61130428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档