提交 6eb13e72 authored 作者: Whispa's avatar Whispa

commit commit

上级 4f5450b7
...@@ -11,7 +11,6 @@ import com.example.afrishop_v3.models.TbCfCoupon; ...@@ -11,7 +11,6 @@ import com.example.afrishop_v3.models.TbCfCoupon;
import com.example.afrishop_v3.models.TbCfToicoupon; import com.example.afrishop_v3.models.TbCfToicoupon;
import com.example.afrishop_v3.models.TbCfUserInfo; import com.example.afrishop_v3.models.TbCfUserInfo;
import com.example.afrishop_v3.payload.request.LoginRequest; import com.example.afrishop_v3.payload.request.LoginRequest;
import com.example.afrishop_v3.payload.response.MessageResponse;
import com.example.afrishop_v3.repository.NetworkRepository; import com.example.afrishop_v3.repository.NetworkRepository;
import com.example.afrishop_v3.repository.TbCfCouponRepository; import com.example.afrishop_v3.repository.TbCfCouponRepository;
import com.example.afrishop_v3.repository.TbCfToicouponRepository; import com.example.afrishop_v3.repository.TbCfToicouponRepository;
...@@ -20,7 +19,6 @@ import com.example.afrishop_v3.security.jwt.JwtUtils; ...@@ -20,7 +19,6 @@ import com.example.afrishop_v3.security.jwt.JwtUtils;
import com.example.afrishop_v3.security.services.UserDetailsImpl; import com.example.afrishop_v3.security.services.UserDetailsImpl;
import com.example.afrishop_v3.util.IdUtil; import com.example.afrishop_v3.util.IdUtil;
import org.hashids.Hashids; import org.hashids.Hashids;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
...@@ -30,6 +28,8 @@ import org.springframework.security.core.context.SecurityContextHolder; ...@@ -30,6 +28,8 @@ import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Calendar; import java.util.Calendar;
...@@ -42,161 +42,178 @@ import java.util.stream.Collectors; ...@@ -42,161 +42,178 @@ import java.util.stream.Collectors;
@RestController @RestController
@RequestMapping("/api/auth") @RequestMapping("/api/auth")
public class AuthController extends Controller { public class AuthController extends Controller {
private final AuthenticationManager authenticationManager; private final AuthenticationManager authenticationManager;
private final UserRepository userRepository; private final UserRepository userRepository;
private final TbCfCouponRepository couponRepository; private final TbCfCouponRepository couponRepository;
private final TbCfToicouponRepository toicouponRepository; private final TbCfToicouponRepository toicouponRepository;
private final NetworkRepository networkRepository; private final NetworkRepository networkRepository;
private final EntityManager entityManager;
private final PasswordEncoder encoder;
private final DomainProperties domainProperties; private final PasswordEncoder encoder;
private final DomainProperties domainProperties;
private final JwtUtils jwtUtils;
private final JwtUtils jwtUtils;
public AuthController(AuthenticationManager authenticationManager, UserRepository userRepository, TbCfCouponRepository couponRepository, TbCfToicouponRepository toicouponRepository, NetworkRepository networkRepository, PasswordEncoder encoder, DomainProperties domainProperties, JwtUtils jwtUtils) {
this.authenticationManager = authenticationManager; public AuthController(AuthenticationManager authenticationManager, UserRepository userRepository, TbCfCouponRepository couponRepository, TbCfToicouponRepository toicouponRepository, NetworkRepository networkRepository, EntityManager entityManager, PasswordEncoder encoder, DomainProperties domainProperties, JwtUtils jwtUtils) {
this.userRepository = userRepository; this.authenticationManager = authenticationManager;
this.couponRepository = couponRepository; this.userRepository = userRepository;
this.toicouponRepository = toicouponRepository; this.couponRepository = couponRepository;
this.networkRepository = networkRepository; this.toicouponRepository = toicouponRepository;
this.encoder = encoder; this.networkRepository = networkRepository;
this.domainProperties = domainProperties; this.entityManager = entityManager;
this.jwtUtils = jwtUtils; this.encoder = encoder;
} this.domainProperties = domainProperties;
this.jwtUtils = jwtUtils;
@PostMapping("/signin") }
public Result authenticateUser(@RequestBody LoginRequest loginRequest) {
Optional<TbCfUserInfo> byAccount = userRepository.findByFirebaseUid(loginRequest.getAccount()); @PostMapping("/signin")
if( !byAccount.isPresent() ){ public Result authenticateUser(@RequestBody LoginRequest loginRequest) {
return new Result<>(ResultCodeEnum.VALIDATE_ERROR.getCode(),"User not found"); Optional<TbCfUserInfo> byAccount = userRepository.findByFirebaseUid(loginRequest.getAccount());
} Result<Object> notFound = new Result<>(ResultCodeEnum.VALIDATE_ERROR.getCode(), "User not found");
if (!byAccount.isPresent()) {
Authentication authentication;
try { boolean b = userRepository.existsByAccount(loginRequest.getAccount());
authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(loginRequest.getAccount(), loginRequest.getPassword())); if (b) {
}catch (BadCredentialsException e){ Optional<TbCfUserInfo> firstByAccount = userRepository.findFirstByAccount(loginRequest.getAccount());
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Invalid username or password"); if (firstByAccount.isPresent()) {
} TbCfUserInfo userInfo = firstByAccount.get();
userInfo.setFirebaseUid(loginRequest.getAccount());
SecurityContextHolder.getContext().setAuthentication(authentication); try {
String jwt = jwtUtils.generateJwtToken(authentication); userRepository.save(userInfo);
} catch (Exception e) {
UserDetailsImpl userDetails = (UserDetailsImpl) authentication.getPrincipal(); return notFound;
List<String> roles = userDetails.getAuthorities().stream() }
.map(GrantedAuthority::getAuthority) byAccount = Optional.of(userInfo);
.collect(Collectors.toList()); } else return notFound;
} else
TbCfUserInfo userInfo = byAccount.get(); return notFound;
}
userInfo.setToken(jwt);
Authentication authentication;
if( loginRequest.getFcm() != null ){ try {
userInfo.setFcm(loginRequest.getFcm()); authentication = authenticationManager.authenticate(
} new UsernamePasswordAuthenticationToken(loginRequest.getAccount(), loginRequest.getPassword()));
} catch (BadCredentialsException e) {
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Invalid username or password");
}
SecurityContextHolder.getContext().setAuthentication(authentication);
String jwt = jwtUtils.generateJwtToken(authentication);
UserDetailsImpl userDetails = (UserDetailsImpl) authentication.getPrincipal();
List<String> roles = userDetails.getAuthorities().stream()
.map(GrantedAuthority::getAuthority)
.collect(Collectors.toList());
TbCfUserInfo userInfo = byAccount.get();
userInfo.setToken(jwt);
if (loginRequest.getFcm() != null) {
userInfo.setFcm(loginRequest.getFcm());
}
userInfo.setLastLoginTime(new Date()); userInfo.setLastLoginTime(new Date());
userRepository.save(userInfo); userRepository.save(userInfo);
if( userInfo.hasFcm() ){ if (userInfo.hasFcm()) {
sendNotification(userInfo.getFcm(),"Welcome ",userInfo.display() + ", Welcome and start shopping !!!"); sendNotification(userInfo.getFcm(), "Welcome ", userInfo.display() + ", Welcome and start shopping !!!");
} }
return new Result<>(userInfo); return new Result<>(userInfo);
} }
@PostMapping("/signup")
public Result<?> registerUser( @RequestBody TbCfUserInfo signUpRequest) { @PostMapping("/signup")
try { public Result<?> registerUser(@RequestBody TbCfUserInfo signUpRequest) {
try {
// boolean byAccount = userRepository.existsByAccount(signUpRequest.getEmail()); // boolean byAccount = userRepository.existsByAccount(signUpRequest.getEmail());
// if ( byAccount ) { // if ( byAccount ) {
// return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Error: Username is already taken!"); // return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Error: Username is already taken!");
// } // }
String email = signUpRequest.getEmail(); String email = signUpRequest.getEmail();
String password = signUpRequest.getPassword();
email = email == null ? "" : email.trim();
if( email.isEmpty() ){ String password = signUpRequest.getPassword();
return new Result<>(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Email is empty");
}
if( !isEmailValid(email) ){ email = email == null ? "" : email.trim();
return new Result<>(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Invalid email");
}
if( password == null || password.isEmpty() ){
return new Result<>(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Password is Empty");
}
if( !isPasswordValid(password) ){ if (email.isEmpty()) {
return new Result<>(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Email is empty");
}
String string = "Password is not strong"; if (!isEmailValid(email)) {
return new Result<>(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Invalid email");
}
if( !isPasswordValidDigit(password) ){ if (password == null || password.isEmpty()) {
string += ", a digit must occur at least once"; return new Result<>(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Password is Empty");
} }
if( !isPasswordValidUpperCase(password) ){ if (!isPasswordValid(password)) {
string += ", an upper case letter must occur at least once";
}
if( !isPasswordValidLength(password) ){ String string = "Password is not strong";
string += ", at least eight characters though";
}
return new Result<>(ResultCodeEnum.VALIDATE_ERROR.getCode(),string); if (!isPasswordValidDigit(password)) {
} string += ", a digit must occur at least once";
}
boolean byEmail = userRepository.existsByFirebaseUid(email); if (!isPasswordValidUpperCase(password)) {
string += ", an upper case letter must occur at least once";
}
if ( byEmail ) { if (!isPasswordValidLength(password)) {
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Error: Email is already in use!"); string += ", at least eight characters though";
} }
return new Result<>(ResultCodeEnum.VALIDATE_ERROR.getCode(), string);
}
signUpRequest.setFirebaseUid(email); boolean byEmail = userRepository.existsByFirebaseUid(email);
signUpRequest.setAccount(email); boolean byEmail2 = userRepository.existsByAccount(email);
signUpRequest.setUserId(IdUtil.createIdbyUUID()); if (byEmail || byEmail2) {
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(), "Error: Email is already in use!");
}
fillUserNecessayInfo(signUpRequest);
signUpRequest.setPassword(encoder.encode(password)); signUpRequest.setFirebaseUid(email);
signUpRequest.setAccount(email);
signUpRequest.setLastLoginTime(new Date()); signUpRequest.setUserId(IdUtil.createIdbyUUID());
fillUserNecessayInfo(signUpRequest);
fixCode(signUpRequest); signUpRequest.setPassword(encoder.encode(password));
TbCfUserInfo userInfo = userRepository.save(signUpRequest); signUpRequest.setLastLoginTime(new Date());
//addToNetwork(signUpRequest); fixCode(signUpRequest);
TbCfUserInfo userInfo = userRepository.save(signUpRequest);
fixCoupon(signUpRequest);
return authenticateUser(new LoginRequest(userInfo.getFirebaseUid(),password,userInfo.getFcm())); //addToNetwork(signUpRequest);
}
catch (Exception e){
System.out.println(e.getMessage());
return new Result<>(ResultCodeEnum.SERVICE_ERROR.getCode(),e.getMessage());
}
}
fixCoupon(signUpRequest);
return authenticateUser(new LoginRequest(userInfo.getFirebaseUid(), password, userInfo.getFcm()));
} catch (Exception e) {
System.out.println(e.getMessage());
return new Result<>(ResultCodeEnum.SERVICE_ERROR.getCode(), e.getMessage());
}
}
@PostMapping(value = "/register/user") @PostMapping(value = "/register/user")
public Result checkFirebase(@RequestBody TbCfUserInfo user) throws ParseException { public Result checkFirebase(@RequestBody TbCfUserInfo user) throws ParseException {
//Data to be userInfoVo //Data to be userInfoVo
// { // {
// "firebaseUid":"firebaseUid", // "firebaseUid":"firebaseUid",
// "name":"name", // "name":"name",
...@@ -206,165 +223,181 @@ public class AuthController extends Controller { ...@@ -206,165 +223,181 @@ public class AuthController extends Controller {
// "token":"token", // "token":"token",
// } // }
// Check if firebase token is valid // Check if firebase token is valid
boolean isTokenValid = user.getToken() != null && validateFirebaseToken(user.getToken()); boolean isTokenValid = user.getToken() != null && validateFirebaseToken(user.getToken());
// if valid do sign in if firebase Uid exist in database or register as new user
if (isTokenValid) {
//Query to find user from database by firebase uid
Optional<TbCfUserInfo> optional = userRepository.findByFirebaseUid(user.getFirebaseUid());
if ( !optional.isPresent() ) {
String userid = IdUtil.createIdbyUUID(); // if valid do sign in if firebase Uid exist in database or register as new user
if (isTokenValid) {
//Query to find user from database by firebase uid
Optional<TbCfUserInfo> optional = userRepository.findByFirebaseUid(user.getFirebaseUid());
user.setPassword(encoder.encode(user.getFirebaseUid())); if (user.getEmail() != null && !user.getEmail().isEmpty() && userRepository.existsByAccount(user.getEmail())) {
user.setUserId(userid); optional = userRepository.findFirstByAccount(user.getEmail());
}
fillUserNecessayInfo(user); if (!optional.isPresent()) {
user = userRepository.save(user);
String userid = IdUtil.createIdbyUUID();
//赠送用户优惠券 user.setPassword(encoder.encode(user.getFirebaseUid()));
fixCoupon(user); user.setUserId(userid);
} else {
TbCfUserInfo userInfo = optional.get();
if( user.hasFcm() ){ fillUserNecessayInfo(user);
userInfo.setFcm(user.getFcm()); user = userRepository.save(user);
}
String property = domainProperties.getProperty("user.avatar");
property = property == null ? "" : property; //赠送用户优惠券
fixCoupon(user);
} else {
TbCfUserInfo userInfo = optional.get();
boolean b = property.equals(userInfo.getAvatar()) || userInfo.getAvatar() == null || userInfo.getAvatar().isEmpty(); if (user.hasFcm()) {
userInfo.setFcm(user.getFcm());
}
String property = domainProperties.getProperty("user.avatar");
if( user.getAvatar() != null && b){ property = property == null ? "" : property;
userInfo.setAvatar(user.getAvatar());
}
boolean b1 = userInfo.getNick() == null || userInfo.getNick().isEmpty(); boolean b = property.equals(userInfo.getAvatar()) || userInfo.getAvatar() == null || userInfo.getAvatar().isEmpty();
if( user.getNick() != null && b1){
userInfo.setNick(user.getNick());
}
if( user.getEmail() != null ){
userInfo.setEmail(user.getEmail());
}
if( user.getPhone() != null ){ if (user.getAvatar() != null && b) {
userInfo.setPhone(user.getPhone()); userInfo.setAvatar(user.getAvatar());
} }
user = userInfo; boolean b1 = userInfo.getNick() == null || userInfo.getNick().isEmpty();
if (user.getNick() != null && b1) {
userInfo.setNick(user.getNick());
}
} if (user.getEmail() != null) {
// generate token codes has been moved downwards from if condition of checking if user doesn't exist in database, because even if userInfo.setEmail(user.getEmail());
// user exist we have to generate token also }
if( user.getPassword() == null ){
user.setPassword(encoder.encode(user.getFirebaseUid()));// Assign user from database to the user we have to return back to request
}
if (user.getUserType() != null) {
userInfo.setUserType(user.getUserType());
}
if (user.getPhone() != null) {
userInfo.setPhone(user.getPhone());
}
user = userInfo;
fixCode(user); }
// generate token codes has been moved downwards from if condition of checking if user doesn't exist in database, because even if
// user exist we have to generate token also
if (user.getPassword() == null) {
user.setPassword(encoder.encode(user.getFirebaseUid()));// Assign user from database to the user we have to return back to request
}
//addToNetwork(user);
user.setLastLoginTime(new Date()); fixCode(user);
userRepository.save(user);
//注册成功 创建token
return authenticateUser(new LoginRequest(user.getFirebaseUid(),user.getFirebaseUid())); //addToNetwork(user);
user.setLastLoginTime(new Date());
userRepository.save(user);
//注册成功 创建token
} else { return authenticateUser(new LoginRequest(user.getFirebaseUid(), user.getFirebaseUid()));
return new Result<>(ResultCodeEnum.ILLEGAL_ARGUMENT.getCode(),ResultCodeEnum.ILLEGAL_ARGUMENT.getDesc());
}
}
} else {
return new Result<>(ResultCodeEnum.ILLEGAL_ARGUMENT.getCode(), ResultCodeEnum.ILLEGAL_ARGUMENT.getDesc());
}
private void fixCoupon(TbCfUserInfo user){ }
try{
List<TbCfCoupon> couponVailList = couponRepository.findAllByCouponVaild(1);
//获取当前时间的时分秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");//设置日期格式
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, +7);
Date time = c.getTime();
Date startDate = sdf.parse(sdf.format(new Date()));
Date endDate = sdf.parse(sdf.format(time));
for (TbCfCoupon tbCfCoupon : couponVailList) {
TbCfToicoupon toi = new TbCfToicoupon();
//把上面获取到的值,赋值到实体类中
toi.setToitableId(IdUtil.createIdbyUUID());
toi.setCoupon(tbCfCoupon);
toi.setUserId(user.getUserId());
toi.setStartTime(startDate);
toi.setIdentification(3);
toi.setEnableFlag(1);
toi.setEndTime(endDate);
toicouponRepository.save(toi);
}
}catch (Exception e){
}
}
private void fixCode(TbCfUserInfo user){ private void fixCoupon(TbCfUserInfo user) {
if( user.getCode() == null){ try {
Hashids hashids = new Hashids("big_afr_dev", 6); List<TbCfCoupon> couponVailList = couponRepository.findAllByCouponVaild(1);
Long codeCount = user.getCodeCount(); //获取当前时间的时分秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");//设置日期格式
Calendar cal = Calendar.getInstance(); Calendar c = Calendar.getInstance();
long currentTime = cal.getTimeInMillis(); c.add(Calendar.DATE, +7);
long Max = 9999999999999L; Date time = c.getTime();
long Min = 1000000000000L; Date startDate = sdf.parse(sdf.format(new Date()));
long range = Math.abs((long) (Math.random() * (Max - Min)) + Min); Date endDate = sdf.parse(sdf.format(time));
long id = Math.addExact(currentTime, range); for (TbCfCoupon tbCfCoupon : couponVailList) {
TbCfToicoupon toi = new TbCfToicoupon();
if( codeCount == null){ //把上面获取到的值,赋值到实体类中
id = userRepository.count() + id; toi.setToitableId(IdUtil.createIdbyUUID());
} toi.setCoupon(tbCfCoupon);
toi.setUserId(user.getUserId());
user.setCode(hashids.encode(id)); toi.setStartTime(startDate);
} toi.setIdentification(3);
} toi.setEnableFlag(1);
toi.setEndTime(endDate);
private void addToNetwork(TbCfUserInfo user){ toicouponRepository.save(toi);
Network top = networkRepository.findTopByOrderByIdDesc(); }
} catch (Exception e) {
if( top != null && !user.invited() ) {
if (!networkRepository.existsByUserInfo_UserIdAndNetworkInfo_UserId(top.getNetworkId(), user.getUserId())){ }
Network network = new Network(); }
network.setUserInfo(top.getNetworkInfo());
network.setNetworkInfo(user); private void fixCode(TbCfUserInfo user) {
//network.setId(uid());
networkRepository.save(network); if( user.getCode() == null ) {
user.setInvitation(1); Query nativeQuery = entityManager.createNativeQuery("select b.code as data FROM user_info b where b.external_id=:user limit 1");
}
} nativeQuery.setParameter("user", user.getUserId());
}
if (nativeQuery.getSingleResult() != null) {
private void fillUserNecessayInfo(TbCfUserInfo tbCfUserInfoVo) { user.setCode((String) nativeQuery.getSingleResult());
if( tbCfUserInfoVo.getAvatar() == null) tbCfUserInfoVo.setAvatar(domainProperties.getProperty("user.avatar")); }
tbCfUserInfoVo.setUserNo(IdUtil.createIdByDate()); }
tbCfUserInfoVo.setPhoneFlag(StateConstant.INVALID);
tbCfUserInfoVo.setLoginCount(0); if (user.getCode() == null) {
tbCfUserInfoVo.setCreateTime(new Date()); Hashids hashids = new Hashids("big_afr_dev", 6);
tbCfUserInfoVo.setSex(SexEnum.UNKNOW.getCode()); Long codeCount = user.getCodeCount();
tbCfUserInfoVo.setInvitedCount(0);
tbCfUserInfoVo.setEnableFlag(StateConstant.VALID); Calendar cal = Calendar.getInstance();
//目前有验证码的都是邮箱类型 long currentTime = cal.getTimeInMillis();
tbCfUserInfoVo.setUserType(UserTypeEnum.FACEBOOK.getCode()); long Max = 9999999999999L;
tbCfUserInfoVo.setEmailFlag(StateConstant.INVALID); long Min = 1000000000000L;
} long range = Math.abs((long) (Math.random() * (Max - Min)) + Min);
long id = Math.addExact(currentTime, range);
if (codeCount == null) {
id = userRepository.count() + id;
}
user.setCode(hashids.encode(id));
}
}
private void addToNetwork(TbCfUserInfo user) {
Network top = networkRepository.findTopByOrderByIdDesc();
if (top != null && !user.invited()) {
if (!networkRepository.existsByUserInfo_UserIdAndNetworkInfo_UserId(top.getNetworkId(), user.getUserId())) {
Network network = new Network();
network.setUserInfo(top.getNetworkInfo());
network.setNetworkInfo(user);
//network.setId(uid());
networkRepository.save(network);
user.setInvitation(1);
}
}
}
private void fillUserNecessayInfo(TbCfUserInfo tbCfUserInfoVo) {
if (tbCfUserInfoVo.getAvatar() == null) tbCfUserInfoVo.setAvatar(domainProperties.getProperty("user.avatar"));
tbCfUserInfoVo.setUserNo(IdUtil.createIdByDate());
tbCfUserInfoVo.setPhoneFlag(StateConstant.INVALID);
tbCfUserInfoVo.setLoginCount(0);
tbCfUserInfoVo.setCreateTime(new Date());
tbCfUserInfoVo.setSex(SexEnum.UNKNOW.getCode());
tbCfUserInfoVo.setInvitedCount(0);
tbCfUserInfoVo.setEnableFlag(StateConstant.VALID);
//目前有验证码的都是邮箱类型
if (tbCfUserInfoVo.getUserType() == null)
tbCfUserInfoVo.setUserType(UserTypeEnum.UN_KNOW.getCode());
tbCfUserInfoVo.setEmailFlag(StateConstant.INVALID);
}
} }
server.servlet.context-path=/zion server.servlet.context-path=/zion
spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.ddl-auto=update
server.port = 7001 server.port = 7000
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:159.138.48.71}:3306/chinafrica_ref?useUnicode=true&connectionCollation=utf8mb4_general_ci&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC spring.datasource.url=jdbc:mysql://${MYSQL_HOST:47.106.242.175}:3306/afrishop_test?useUnicode=true&connectionCollation=utf8mb4_general_ci&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=root spring.datasource.username=root
spring.datasource.password=Diaoyunnuli.8 spring.datasource.password=diaoyun666
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.datasource.connectionInitSql: SET NAMES 'utf8mb4' spring.datasource.connectionInitSql: SET NAMES 'utf8mb4'
#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect #spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论