У меня есть пакетное приложение Spring, в котором мы используем SimpleJobLauncher.При этом у нас есть запрос Rest для запуска пакетного задания в Excel, который при сохранении сущности на этапе записи не выбирает последний набор AuditorAware через полученный поток HTTP.
Я попытался установить имя пользователя в JobParameter и затем извлечьТо же самое в Writer для установки локальной переменной потока имени пользователя, но она также не выбирается.
Я использую Threadlocal для сохранения пользователя, как только мы получим запрос, который предоставляет информацию о пользователе для audorawareware.
public static final InheritableThreadLocal<String> USERNAME = new InheritableThreadLocal<>();
@Bean
public AuditorAware<String> auditorProvider() {
if (USERNAME.get() != null) {
return () -> Optional.of(USERNAME.get());
}
return () -> Optional.of(WebConstant.DEFAULT_USER);
}
public class HeaderInterceptor implements HandlerInterceptor {
/**
* This implementation always returns {@code true}.
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String username = request.getHeader("username");
if(null == username) {
throw new UserNotProvidedException("USER_NOT_PROVIDED");
}
USERNAME.set(username);
return true;
}
}