Hinweis: Verwenden Sie static, um eine Injektionsmethode oder eine Wertvariable für die Konfigurationsdatei zu definieren. Während der Kompilierung tritt keine Ausnahme auf, und zur Laufzeit wird ein Nullzeiger gemeldet.
Frühlingsbeamte empfehlen diese Methode nicht.
Prinzip:
https://www.cnblogs.com/chenfeng1122/p/6270217.html
Lösung
Verwenden Sie die Set-Injection-Methode von Spring, um statische Variablen über nicht statische Setter-Methoden zu injizieren. Wir können sie ändern, damit die statischen Variablen die von Ihnen konfigurierten Informationen erhalten.
Entfernen Sie den statischen Modifikator der Methoden get und set und fügen Sie der set-Methode @Autowired hinzu.
/** 阿里云OSS配置查询 */
private static OSSConfMapper ossConfMapper;
/** 阿里云OSS图片上传 */
private static UploadImgOSS uploadImgOSS;
public OSSConfMapper getOssConfMapper() {
return ossConfMapper;
}
@Autowired
public void setOssConfMapper(OSSConfMapper ossConfMapper) {
UploadUtil.ossConfMapper = ossConfMapper;
}
public UploadImgOSS getUploadImgOSS() {
return uploadImgOSS;
}
@Autowired
public void setUploadImgOSS(UploadImgOSS uploadImgOSS) {
UploadUtil.uploadImgOSS = uploadImgOSS;
}
Referenzdokumente
https://blog.csdn.net/kongrun12/article/details/76246369
https://blog.csdn.net/zxl646801924/article/details/81738231
https://blog.csdn.net/u014079773/article/details/66973830
Nach dem Versuch gibt es zwei Möglichkeiten, dies zu erreichen
Methode 1: Deklarieren Sie eine statische Variable oder Methode und fügen Sie dann eine entsprechende Variable und Methode entsprechend ein. Schließlich wird die PostConstruct-Annotation in init implementiert.
Code wie unten anzeigen
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;
import tylin.paas.transfers.util.DateUtil;
import javax.annotation.PostConstruct;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
@Slf4j
@Component
public class ErrorHandler {
@Value("${customer.mail.bankMail.sender}")
private String configSender;
private static String sender;
@Value("${customer.mail.bankMail.receiver}")
private String configReceiver;
private static String receiver;
public static ErrorHandler errorHandler;
@Autowired
JavaMailSender autoJavaMailSender;
private static JavaMailSender javaMailSender;
@PostConstruct
public void init() {
sender = configSender;
receiver = configReceiver;
javaMailSender = autoJavaMailSender;
errorHandler = this;
}
public static void sendMail() {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(sender);
message.setTo(receiver.split(";"));
message.setSubject("your subject");
message.setText("your content text");
try {
javaMailSender.send(message);
log.info("发送邮件成功!");
} catch (Exception e) {
log.error("发送邮件时发生异常!", e);
}
}
}
Methode 2: (Pro-Test möglich)
Während des Abbindens injizieren
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;
import org.springframework.test.context.junit4.SpringRunner;
import org.tylin.TylinERPApplication;
import java.text.SimpleDateFormat;
import java.util.Date;
@Slf4j
@Component
@SpringBootTest(classes = TylinERPApplication.class)
@RunWith(SpringRunner.class)
public class MailAutoSendTest {
private static String sender;
//可以不要
public String getSender() {
return sender;
}
@Value("${customer.mail.bankMail.sender}")
public void setSender(String sender) {
MailAutoSendTest.sender = sender;
}
private static String receiver;
//可以不要
public String getReceiver() {
return receiver;
}
@Value("${customer.mail.bankMail.receiver}")
public void setReceiver(String receiver) {
MailAutoSendTest.receiver = receiver;
}
private static JavaMailSender javaMailSender;
public JavaMailSender getJavaMailSender(){
return javaMailSender;
}
@Autowired
public void setJavaMailSender(JavaMailSender javaMailSender){
MailAutoSendTest.javaMailSender = javaMailSender;
}
@Test
public void sendMail() {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(sender);
log.info(sender);
log.info(receiver);
message.setTo(receiver.split(";"));
message.setSubject("xxxx");
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
message.setText("xxxx"+dateFormat.format(date));
try {
javaMailSender.send(message);
log.info("简单邮件已经发送。");
} catch (Exception e) {
log.error("发送简单邮件时发生异常!", e);
}
}
}
Pro Testbeispiel:
@Component
public class NetEleUtil {
private static WirelessResourceProperties resProps;
public WirelessResourceProperties getResProps() {
return resProps;
}
// @Autowired
public void setResProps(WirelessResourceProperties resProps) {
NetEleUtil.resProps = resProps;
}
/**
* 根据网元英文简称获取网元中文名称
*
* @param obj
* @return java.util.Map<java.lang.String,java.lang.Object>
* @author liangzhaolin
* @date 2020/10/22 11:00
*/
public static String getNetEleTableCnName(String netEleType) {
Map<String, String> tableMap = resProps.getTableCnName();
String netEleTableCnName = tableMap.get(netEleType);
return netEleTableCnName;
}
}