を使用して成功したユーザ登録後にSMSを送信することができ、私は、関連する顧客にSMSを送信する必要があります。私は以下のようなアドバイスとしてSMSサービスを公開している。この目的のためにはどうすれば成功し、アカウント作成後に春ブーツ
。
package com.naresh.advice;
import javax.annotation.PostConstruct;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.naresh.dto.AccountDTO;
import com.naresh.dto.CustomerDTO;
import com.twilio.Twilio;
import com.twilio.rest.api.v2010.account.Message;
import com.twilio.type.PhoneNumber;
@Component
@Aspect
public class SMSService {
@Value("${twilio.sms.authentication_Id:80b7c5a8b73a26a9b588a906d54269c3}")
private String authenticationId;
@Value("${twilio.sms.account_sid:AC038d9532222b3d39fce4b43a5dce9ce1}")
private String accountId;
@Value("${twilio.sms.from_number:+12566662741}")
private String fromNumber;
@PostConstruct
public void init() {
Twilio.init(accountId, authenticationId);
}
@AfterReturning(pointcut = "execution(* com.naresh.service.impl.CustomerServiceImpl.save(..)) && args(customerDTO,..)", returning = "custId")
public void sendSMS(JoinPoint joinPt, CustomerDTO customerDTO, Long custId) {
Message.creator(new PhoneNumber(customerDTO.getMobile()), new PhoneNumber(fromNumber),
"Customer " + custId + " registered successfully...").create();
}
@AfterReturning(pointcut = "execution(* com.naresh.service.impl.AccountServiceImpl.createAccount(..))", returning = "accDTO")
public void sendSMSAcc(JoinPoint joinPt, AccountDTO accDTO) {
CustomerDTO customerDTO = accDTO.getCustomer();
Message.creator(new PhoneNumber(customerDTO.getMobile()), new PhoneNumber(fromNumber),
"Hi " + customerDTO.getName() + ", Your " + accDTO.getAccountType() + " account " + accDTO.getAccNo()
+ " has been registered with us successfully.Your balance is " + accDTO.getBalance())
.create();
}
}
上記の作業は、アカウント作成タスクが成功した場合にうまくいきます。しかし、私たちが何らかのエラーを起こしている場合、その時にも成功したSMSが顧客によって受け取られます。
私を助けてください。 docsに応じて予め
私たちはユニークキー違反の例を見てみましょう。私たちがユニークキーに違反している場合、save()呼び出し時に例外はありません。データのコミット時に例外が発生します。上記のシナリオでは、SMS自体がコミットされる前にトリガされます。データベースへのデータ保存に失敗した場合は、お客様にSMSを送信しないでください。しかし、私のアプリケーションでは、SMSが起動されます。以前のSaveメソッドでそれをコミットまたはコミットした後、あなたがそれを得るために、ポイントカットを変更する必要があり、その場合には –
がトリガ。これは、アスペクトとは何も共通していませんが、質問に表示されていないアプリケーションのロジックと、それを使用する方法について説明しています。ここ – Stanislav
こんにちはStabislav、セーブは())スプリングデータJPAは(保存することを示し@トランザクション \t公共AccountDTO createAccount(AccountDTO accountDTO){ \t \tアカウントアカウント= acctRepo.save((accountDTO)に変換)。 \t \t log.info(account.getAccNo()+ "作成されました..."); \t \t \t \t戻り変換(アカウント)。 \t} –