У меня проблема с проектом.Я создаю очень примитивную программу чата с spring и redis.
У меня есть подключение redis как Spring Bean:
private HashOperations hashOps;
@Autowired
public UserRepositoryImpl(RedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
@PostConstruct
private void init() {
hashOps = redisTemplate.opsForHash();
}
Пока здесь все не работает, и hashopобъявлен как шаблон.Но теперь я звоню
public boolean createUser(User user){
if(user.getName().isEmpty() || user.getPassword().isEmpty()){
return false;
}
user.setStatus("");
if(hashOps.putIfAbsent(KEY, user.getName(), user)){
List<String> following = null;
hashOps.put("isFollowing", user.getName(),following);
FollowListImpl fLI = new FollowListImpl(this.redisTemplate);
fLI.follow("global", user);
return true;
}
return false;
}
, чтобы создать первые данные (пользователя) в redis.Этот метод находится в том же классе, что и объявление hashOps
, но hasOps
теперь равно NULL.Но когда я использую проект от кого-то другого, у которого есть подобное, решение hashOps
сохраняет шаблон даже при вызовах методов.
Redis подключается в основном классе (начальный класс):
@SpringBootApplication
public class CommunicatorApplication {
@Bean
public JedisConnectionFactory getConnectionFactory() {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setPort(6379);
jedisConnectionFactory.setHostName("localhost");
jedisConnectionFactory.setPassword("");
return jedisConnectionFactory;
}
@Bean
RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(getConnectionFactory());
return template;
}
public static void main(String[] args) {
SpringApplication.run(CommunicatorApplication.class, args);
}
}
Теперь вопрос в том, как пружина на самом деле сохраняет hashOps
, когда она работает должным образом, и что я сделала неправильно, что она не сохраняет это в моем коде.
Я звоню createUser
здесь:
@Controller
public class LoginController {
@RequestMapping(value = "/login", params = "btnRegister")
public String loginRegister(@ModelAttribute Login login, Model model){
model.addAttribute("login", login != null ? login : new Login());
UserRepositoryImpl user = new UserRepositoryImpl(null);
user.createUser(login.getName(),login.getPassword());
System.out.println(user.findUser(login.getName()));
return "login";
}