gpt4 book ai didi

java - 使用 Java 配置在 Spring 中处理多个配置文件的最佳实践是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:12:03 25 4
gpt4 key购买 nike

在我目前正在进行的项目中,我们需要多个配置文件,即“默认”和“测试”。为了解决这个问题,我们实现了一个主上下文类 ApplicationContext.java,其中包含 2 个公共(public)静态内部类:其中一个定义默认配置文件,另一个定义测试配置文件。我们的 web.xml 设置为目标 ApplicationContext.java。

代码如下:

@Configuration
//import common beans
public class ApplicationContext {

@Configuration
@Profile("default")
public static class DefaultContext {
//default beans
}

@Configuration
@Profile("test")
public static class TestContext {
//test beans
}

}

我的问题是主上下文类 ApplicationContext.java 在生产环境(即 src/main/java)中引用了测试环境中的文件。如果有更好的方法来定义这些配置文件,而不会将这种从生产代码到测试代码的依赖性引入,那当然会更好。

我们已经在测试类中使用 jetty 实例测试了这些案例,从 main 方法开始。此实例使用以下命令运行:

System.setProperty("spring.profiles.active", "test");

最佳答案

如果所有 bean 在您的配置文件之间都是通用的(即 DefaultContextTestContext 包含相同的 bean 定义),请为依赖项定义一个接口(interface),例如:

public interface SystemConfiguration {

public DataSource getDataSource();
public SomeService getService();

}

然后用这个接口(interface)实现每个配置文件:

@Profile("production")
@Configuration
public class ProductionConfiguration implements SystemConfiguration {
public DataSource getDataSource() {
// create and return production datasource
}

public SomeService getService() {
// Create and return production service
}
}

然后做同样的测试。

@Profile("test")
@Configuration
public class TestConfiguration implements SystemConfiguration {
public DataSource getDataSource() {
// create and return dummy datasource
}

public SomeService getService() {
// Create and return dummy service
}
}

然后你可以将它注入(inject)到你的主配置中:

@Configuration
public class ApplicationContext {
@Autowired
private SystemConfiguration systemConfiguration;

}

关于java - 使用 Java 配置在 Spring 中处理多个配置文件的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15903514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com