gpt4 book ai didi

java - IOC容器: de-duplicating the configuration code

转载 作者:行者123 更新时间:2023-12-01 11:29:34 25 4
gpt4 key购买 nike

我正在将 Spring 框架用于 2 个不同的应用程序。假设这两个应用程序都与一个 MongoDB 数据库通信。以下是我在两个应用程序中配置 MongoDB 的方法:

@Configuration
@PropertySource("file:/etc/x/y/mongodb.properties")
public class MongoConfiguration {

@Autowired
private Environment env;

@Bean
public UserCredentials mongoCredentials() {
String mongoUserName = env.getProperty("mongodb.username");
String mongoPassword = env.getProperty("mongodb.password");
UserCredentials credentials = new UserCredentials(mongoUserName, mongoPassword);
return credentials;
}

@Bean
public MongoClient mongoClient() throws Exception {
String mongoUrl = env.getProperty("mongodb.url");
String mongoPort = env.getProperty("mongodb.port");
MongoClient mongo = new MongoClient(mongoUrl, Integer.valueOf(mongoPort));
return mongo;
}

@Bean(name="mongoTemplate")
public MongoTemplate mongoTemplate() throws Exception {
String mongoDatabaseName = env.getProperty("mongodb.databasename");
MongoTemplate mongoTemplate = new MongoTemplate(mongoClient(), mongoDatabaseName, mongoCredentials());
return mongoTemplate;
}

现在,这段代码在两个不同的应用程序配置中重复。如何避免在两个不同的地方进行此配置?

最佳答案

将其视为您不想重复的 util 类:将您的配置文件移至单独的项目,并使您的两个应用程序都包含该项目。

如果您需要添加额外的项目特定配置,Spring 提供了 @Import 注解,允许您从单独的类导入配置,因此您可以创建两个项目特定配置类,它们都从共享库导入通用配置,提供他们自己的单独的bean和属性(property)来源,例如:

@Configuration
@PropertySource("classpath:/com/appspecific/app.properties")
@Import(com.genericlib.BaseConfig.class)
public class AppConfig {
@Inject BaseConfig baseConfig;

@Bean
public MyBean myBean() {
// reference the base config context
return new MyBean(baseConfig.getSomething());
}
}

关于java - IOC容器: de-duplicating the configuration code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30519102/

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