它们是否存在一些方法来处理更新的分页?例如,我有 100 行类型:
@Id
private Integer id;
@Column
private boolean flag;
@Column
private Date last;
Run Code Online (Sandbox Code Playgroud)
一开始它们看起来像:id、false、null
我有坚持的方法:
@Query("SELECT t FROM Test t WHERE (t.last < :processStart OR t.last IS NULL)")
Page<Test> find(Pageable pageable, @Param("processStart") Date processStart);
Run Code Online (Sandbox Code Playgroud)
我需要取 10 个,为每个设置标志 true 和 last = new Date() 并将其保存回数据库。
实现看起来像:
Date start = new Date();
for (int i = 0; i < 10; i++) {
Pageable request = new PageRequest(i, 10, SortDirectuin.ASC, "id");
Page page = testPersistence.find(request, start);
page.getContext().forEach(t -> {
..huge part …Run Code Online (Sandbox Code Playgroud) 再会。我知道“破损的管道”不是一个严重的异常,这意味着客户端没有等待服务器的响应。我知道有很多类似的问题,但我找不到答案
我想保持我的日志清晰,所以我找到了解决方案。
我尝试这样写:
@ControllerAdvice
public class ControllerAdvisor {
private static final Logger LOGGER = LogManager.getLogger();
@ResponseBody
@ExceptionHandler(IOException.class)
@ResponseStatus(HttpStatus.SERVICE_UNAVAILABLE)
public Object brokenPipeHandle(IOException e, HttpServletRequest req) {
if (StringUtils.containsIgnoreCase(ExceptionUtils.getRootCauseMessage(e), "Broken pipe"))
return null;
return new ErrorDto(e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
但断管异常仍然发生,我在日志中看到:
java.io.IOException: Broken pipe
at sun.nio.ch.FileDispatcherImpl.write0(Native Method) ~[na:1.8.0_91]
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) ~[na:1.8.0_91]
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) ~[na:1.8.0_91]
at sun.nio.ch.IOUtil.write(IOUtil.java:65) ~[na:1.8.0_91]
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471) ~[na:1.8.0_91]
at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:134) ~[tomcat-embed-core-8.5.4.jar:8.5.4]
at org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:101) ~[tomcat-embed-core-8.5.4.jar:8.5.4]
at org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:157) ~[tomcat-embed-core-8.5.4.jar:8.5.4]
at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1241) ~[tomcat-embed-core-8.5.4.jar:8.5.4]
at org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:428) ~[tomcat-embed-core-8.5.4.jar:8.5.4]
at org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:418) ~[tomcat-embed-core-8.5.4.jar:8.5.4]
at org.apache.coyote.http11.Http11OutputBuffer.flushBuffer(Http11OutputBuffer.java:533) ~[tomcat-embed-core-8.5.4.jar:8.5.4]
at …Run Code Online (Sandbox Code Playgroud) 我试图使用Jackson2ObjectMapperBuilderCustomizer将自定义问题处理程序添加到对象映射器:
@Bean
public Jackson2ObjectMapperBuilderCustomizer customizer() {
return new Jackson2ObjectMapperBuilderCustomizer() {
@Override
public void customize(Jackson2ObjectMapperBuilder builder) {
ObjectMapper m = builder.build();
m.addHandler(
new DeserializationProblemHandler() {
@Override
public boolean handleUnknownProperty(DeserializationContext ctxt, JsonParser p, JsonDeserializer<?> deserializer, Object beanOrClass, String propertyName) throws IOException {
System.out.println("ahahahaa");
return super.handleUnknownProperty(ctxt, p, deserializer, beanOrClass, propertyName);
}
}
);
}
};
}
Run Code Online (Sandbox Code Playgroud)
但是当我自动装配ObjectMapper bean时,_problemHandlers属性为null。
我也尝试过使用以下命令自定义现有的ObjectMapper:
@Autowired
public customize(ObjectMapper mapper) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是结果是一样的。我不知道谁可以删除此属性。我根本不会在另一个地方初始化对象映射器的其他构建器/工厂/等。我做错了什么?
我正在尝试在我的 Java 代码中编写一些脚本,我需要在其中登录用户,执行一些类似于真实用户可以从 Web 客户端执行的操作并为每个用户注销。
这在 Spring Security 中是如何工作的?我该怎么办?我的意思是如何模拟真实的用户身份验证,使用会话、角色和权限?
非常感谢!
java ×4
spring ×4
broken-pipe ×1
controller ×1
exception ×1
jackson ×1
objectmapper ×1
pagination ×1
session ×1