我对这个问题感到不好,但谷歌没有帮助.在codehaus消失之后,谁能告诉我maven-rpm-plugin的文档在哪里?
我将 spring boot (无关)与 spring-data-redis:jar:2.0.9 结合使用,它使用 lettuce 连接到我的 REDIS。我使用的哈希结构包含大约 100 个键。在这些键下,我放置了一些类型也不相关的对象:
private static final String HASH_KEY_NAME = "myspecialhashes:somekey";
@Autowired
private RedisTemplate<String, MyDto> myDtoRedisTemplate;
Run Code Online (Sandbox Code Playgroud)
现在我只是将对象列表放入哈希中,使用它们的 id 作为键:
myDtoRedisTemplate.opsForHash().put(HASH_KEY_NAME, dto.getId(), dto);
Run Code Online (Sandbox Code Playgroud)
这工作得很好,并且从哈希中检索所有元素都很好,并且仅检索键
List allDtosRaw = myDtoRedisTemplate.opsForHash().values(HASH_KEY_NAME);
Run Code Online (Sandbox Code Playgroud)
另外,在列出键时:
myDtoRedisTemplate.boundHashOps(HASH_KEY_NAME).keys()
Run Code Online (Sandbox Code Playgroud)
看起来不错,返回的密钥集以以下内容开头:
(java.util.LinkedHashSet<E>) [fakeservicetest:dummy3:write, fakesingle:dummy:sub1:write, ....
Run Code Online (Sandbox Code Playgroud)
由于有很多键,我希望能够使用 HSCAN 过滤以令牌开头的对象列表,而不是获取所有键并在我的 Java 应用程序中过滤它们。所以,这就是我如何进行 HSCAN 来获取所有以“fake”开头的哈希条目
List filteredDtosRaw = new LinkedList<>();
ScanOptions scanOptions = ScanOptions.scanOptions().match("fake*").count(10000).build();
Cursor cursor = myDtoRedisTemplate.boundHashOps(HASH_KEY_NAME).scan(scanOptions);
cursor.forEachRemaining(filteredDtosRaw ::add);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这返回零结果。我尝试了各种方法来解决这个问题并取得了一些成果。最终我转向 redis 命令行来看看 REDIS 是如何看待这一切的
redis-cli HSCAN "myspecialhashes:somekey" 0 MATCH "fake*" COUNT 1000
Run Code Online (Sandbox Code Playgroud)
确实是零结果。接下来的事情是查看其中的所有键并查看哈希中实际包含的内容
redis-cli …Run Code Online (Sandbox Code Playgroud) 我已经使用 Rest 控制器创建了一个 Spring Boot 应用程序(用户 spring-boot-starter-parent V.2.2.2.RELEASE),工作正常,现在我添加了一个依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
并在我的控制器类上添加了@Validated,以便验证其中的所有方法:
@RestController
@Validated
public class UserController {
@Autowired
private UserService userService;
@PostConstruct
public void init() {
System.out.println("test");
}
}
Run Code Online (Sandbox Code Playgroud)
现在,控制器方法在调用时开始抛出 NullPointerExceptions,因为 userService 为 null;我做了一个@PostConstruct 作为测试。显然,它是在一个正常的未增强的 bean 上调用的,该 bean 的字段已正确自动连接。但是,当通过 HTTP 调用控制器时,不会调用这个未增强的 bean,但它是类 UserController$$EnhancerBySpringCGLIB$$ 的 bean,并且它的 userController 未自动装配。我真的不知道为什么,因为这应该很简单,据我所知,没有太多需要配置的。所以我猜由于某种原因,spring 不会将依赖项注入到 CGLIB 增强类中,或者只是将其注入到错误的类中。当我删除@Validated时,一切都再次正常工作,但当然没有验证。