0

我有以下服务,每次客户购买时都会发送电子邮件

@Component
public class EmailerService extends JavaMailSenderImpl {

    public boolean sendEmail(String userFullName, String recipient, String subject, String content,String replyTo)
            throws AddressException, MessagingException {
        initJavaMailProps(replyTo);
        Message message = new MimeMessage(getSession());
        message.setFrom(new InternetAddress(senderEmailAddress));
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(recipient));
        message.setSubject(subject);
        if (withGreeting())
            content = "Dear " + userFullName + ",\n\n"+content;
        if (withRegards())
            content += "\n\nBest Regards, \n\nDNA G2 Support";
        message.setText(content);
        Transport.send(message);
        return true;
    }

在我的 XML 配置中,我有两个Spring profile名为“正常”和“云”。现在我想添加一个新的配置文件让我们说“开发”并想在开发过程中“禁用”这个服务。这是因为在我的本地测试期间仍然发送了许多电子邮件。实现这一目标的最简单方法是什么?

4

1 回答 1

1

当您提到“正常”和“云”时,我假设您正在谈论 Maven 配置文件。

1)在 pom.xml 中向您的 maven 配置文件添加一个属性(注意 Development 为 false)。为方便起见,开发配置文件也是默认配置文件。如果您需要运行另一个配置文件,您可以通过mvn package -P cloud.

  <profiles>
    ...
    <profile>
      <id>normal</id>
      <properties>
        <profile.email.enabled>true</profile.email.enabled>
      </properties>
    </profile>
    ...
    <profile>
      <id>cloud</id>
      <properties>
        <profile.email.enabled>true</profile.email.enabled>
      </properties>
    </profile>
    ...
    <profile>
      <id>Development</id>
      <activation>
          <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <profile.email.enabled>false</profile.email.enabled>
      </properties>
    </profile>
    ...
  </profiles>

2)您需要启用资源过滤,以便您可以将此变量注入到您的 Maven 构建中。在这里,我们说 /src/main/resources 中的所有文件都应该使用我们的 maven 属性进行过滤。

<project>
  ...
  ...
  <build>
    ...
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
      ...
    </resources>
    ...
  </build>
  ...
</project>

2)在您的一个 spring .property 文件(即 environment.properties)中添加以下内容。这里我们说属性 email.enabled 将使用 maven 配置文件中包含的任何内容。

email.enabled=$(profile.email.enabled);

3) 现在在您的电子邮件服务中添加以下实例变量,这会将 .property 文件中的属性注入变量 emailEnabled

@Value("email.enabled")
private boolean emailEnabled;

4)现在您可以在服务中进行检查

if (emailEnabled) {
  ...
}
于 2013-11-11T10:45:29.060 回答