我有一个实用程序类,它具有与电子邮件发件人相关的通用配置,配置会根据 Staging
和 Production
等环境而变化。现在如何根据环境动态选择配置?
这是我的代码,
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/