java - JAVA中如何根据环境动态选择配置?

标签 java spring spring-boot constants

我有一个实用程序类,它具有与电子邮件发件人相关的通用配置,配置会根据 StagingProduction 等环境而变化。现在如何根据环境动态选择配置?

这是我的代码,

EmailUtility.java

package com.housecar.common;

public class EmailUtility {

 //For staging 
 public static final String FROM_EMAIL_ID = "xx12@xyz.com";
 public static final String FROM_NAME = "xyz";
 static final String SMTP_USERNAME = "xx12@xyz.com";
 static final String SMTP_PASSWORD = "15sss67$";
 public static final String REPLY_EMAIL_ID = "xx12@xyz.com";
 public static final String MAIL_SMTP_PORT = "587";
 public static final String MAIL_SMTP_SOCKET_FACTORY_PORT = "587";
 public static final String SMTP_HOST = "smtp.gmail.com";
 public static final String MAIL_SMTP_SOCKETFACTORY_CLASS = "javax.net.ssl.SSLSocketFactory";


 //for production

 /*public static final String FROM_EMAIL_ID = "admin@xyz.com";
 public static final String FROM_NAME = "xyz";
 static final String SMTP_USERNAME = "AKYeeeELEQAGAA"; // Replace with
                                                            // your SMTP
                                                            // username.
 static final String SMTP_PASSWORD = "gvwwwwwbgpGm/C/LmUYUK5HosQar7mTSwjl5MFeBRR";
 public static final String REPLY_EMAIL_ID = "admin@xyz.com";
 public static final String MAIL_SMTP_PORT = "587";
 public static final String MAIL_SMTP_SOCKET_FACTORY_PORT = "587";
 public static final String SMTP_HOST = "email-smtp.us-east-1.amazonaws.com";
 public static final String MAIL_SMTP_SOCKETFACTORY_CLASS = "javax.net.ssl.SSLSocketFactory";*/

}

在我的代码中,我手动注释掉了配置!

最佳答案

你可以使用属性文件来解决你的问题,比如你可以根据环境有两个属性文件。

1) config_staging.properties 2)config_production.properties

并将您的暂存电子邮件配置移动到 config_staging.properties,将您的生产配置移动到 config_production.properties。

将在运行应用程序时进行配置。

例如,

config_staging.properties

 smtp.username = "xx12@xyz.com";
 smtp.password = "15sss67$";

config_production.properties

smtp.username = "AKYeeeELEQAGAA";
smtp.password = "gvwwwwwbgpGm/C/LmUYUK5HosQar7mTSwjl5MFeBRR";

然后将它们注入(inject)到 EmailUtility 类中,

@Value("${smtp.username}")
private String smtpUsername;


@Value("${smtp.password}")
private String smtpPassword;

关于java - JAVA中如何根据环境动态选择配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44383129/

相关文章:

java - maven如何决定构建什么类型的项目以及如何控制单个maven项目中的多个模块?

java - 如何将消息上下文 header 添加到 apache axis 2 Java

java - Spring数据国际化最佳实践

java - 无法使用@ConfigurationProperties 将 map 与spring boot yaml 文件中的复杂键绑定(bind)

java - spring jpa每分钟运行一个任务但HikariPool关闭

java - 添加AsyncTask后空指针。

用户闲置 10 分钟后,Java 应用程序使屏幕显示无响应

java - 不使用 cookie 的 Spring Security session

java - Spring Security - 注销和访问控制不起作用

java - 考虑在您的配置中定义一个类型的 bean