GroupMemberServiceImpl:
Thread thread = new Thread(() -> {
if (!(existingMember == null)) {
if (!(this.groupMembersDAO.checkIfMemberAlreadyExists(existingMember.getUsername(), groupId))) {
members.setMemberUsername(members.getMemberUsername().toLowerCase());
members.setMemberactivated(true);
createToken(existingMember.getFirstName(),members.getMemberUsername(), members.isAccesslevel(), groupId);
WaitingMembers waitingMembers = new WaitingMembers();
waitingMembers.setGroupAccountId(groupId);
waitingMembers.setMemberEmail(members.getMemberUsername());
waitingMembers.setNickName(nickName);
this.waitingMembersService.addMemberInWaiting(waitingMembers);
}
} else {
GroupAccount groupAccount = this.groupAccountService.getGroupById(groupId);
WaitingMembers waitingMembers = new WaitingMembers();
waitingMembers.setGroupAccountId(groupId);
waitingMembers.setMemberEmail(members.getMemberUsername());
waitingMembers.setNickName(nickName);
this.waitingMembersService.addMemberInWaiting(waitingMembers);
Person inviter = this.personService.findPersonByUsername(groupAccount.getAdminUsername());
sendFirstTimeGroupUserAccountActivationEmail(nickName, members, inviter.getFirstName(), groupAccount.getGroupName(), groupId);
}
});
thread.start();
Что-то не так с тем, как я использую потоки? Любой сложный способ, который может предотвратить проблему?
Я использую https, сжатие и кеширование на производстве.
Server.xml на производстве:
<Connector port="80" protocol="HTTP/1.1" compression="force" compressionMinSize="1024"
connectionTimeout="20000"
redirectPort="443" URIEncoding="utf-8"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript"/>
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="200" compression="force"
compressionMinSize="1024" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS"
keystoreFile="/etc/ssl/private/my-keystore.jks" keystorePass="password" URIEncoding="utf-8"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript"
/>
Любая помощь будет приятной. Большое спасибо.
Лучше определить ThreadPoolTaskExecutor для весны. Как это. Возьмите фрагмент кода отсюда. Подход позволяет контролировать количество потоков одновременно.
ThreadPoolTaskExecutor taskExecutor = (ThreadPoolTaskExecutor) context.getBean("taskExecutor");
PrintTask2 printTask1 = (PrintTask2) context.getBean("printTask2");
printTask1.setName("Thread 1");
taskExecutor.execute(printTask1);
О вашем втором вопросе. Короткий ответ - да