Spring 备忘
Gradle bootRun 传 profile
bootRun -Dspring.profiles.active=dev
build.gradle:
bootRun {
systemProperties = System.properties
}
Spring Session Redis:自定义 Cookie 名
默认 Cookie 名多为 SESSION。
@Bean
public <S extends ExpiringSession> SessionRepositoryFilter<? extends ExpiringSession>
springSessionRepositoryFilter(SessionRepository<S> sessionRepository,
ServletContext servletContext) {
SessionRepositoryFilter<S> filter = new SessionRepositoryFilter<>(sessionRepository);
filter.setServletContext(servletContext);
CookieHttpSessionStrategy strategy = new CookieHttpSessionStrategy();
strategy.setCookieName("MY_SESSION_NAME");
filter.setHttpSessionStrategy(strategy);
return filter;
}
参考:https://stackoverflow.com/questions/33095345/how-to-change-spring-session-redis-cookie-name
新版本 API 可能改为
CookieHttpSessionIdResolver等,以当前 Spring Session 文档为准。
全局日期格式(缓解 @DateTimeFormat 不生效)
@Bean
public ConfigurableWebBindingInitializer configurableWebBindingInitializer() {
ConfigurableWebBindingInitializer initializer = new ConfigurableWebBindingInitializer();
FormattingConversionService conversionService = new WebConversionService("yyyy-MM-dd");
new DateFormatterRegistrar().registerFormatters(conversionService);
initializer.setConversionService(conversionService);
return initializer;
}
String → Enum 参数转换
public class StringToEnumConverterFactory implements ConverterFactory<String, Enum> {
@Override
public <T extends Enum> Converter<String, T> getConverter(Class<T> targetType) {
return source -> (T) Enum.valueOf(targetType, source.trim());
}
}
// 注册
conversionService.addConverterFactory(new StringToEnumConverterFactory());
静态方法取 Request / ApplicationContext
仅在 Web 请求线程内可靠。
public final class ContextHolder {
private ContextHolder() {}
public static HttpServletRequest getRequest() {
RequestAttributes attrs = RequestContextHolder.getRequestAttributes();
if (attrs instanceof ServletRequestAttributes) {
return ((ServletRequestAttributes) attrs).getRequest();
}
return null;
}
public static ApplicationContext getContext() {
HttpServletRequest request = getRequest();
if (request == null) {
return null;
}
return WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());
}
}