环境:
Spring Boot 2.6.11
项目1:
工具类项目 com.knowledge:core-1.0.0
里面有redis配置
RedisConfig.java
@Configuration
public class RedisConfig {
/**
* 用户信息缓存
*/
@ConditionalOnMissingBean
@Bean(name = "userRedisTemplate")
public RedisTemplate<String, UserInfoDTO> redisTemplateUser(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String, UserInfoDTO> template = new RedisTemplate<>();
//省略
return template;
}
/**
* 一般缓存
*/
@ConditionalOnMissingBean
@Bean(name = "redisTemplate")
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory factory){
RedisTemplate<String, Object> template = new RedisTemplate<>();
//省略
return template;
}
}
redisUtils.java
@Slf4j
@Component
public class RedisUtil {
private final RedisTemplate<String, UserInfoDTO> userRedisTemplate;
private final RedisTemplate<String, Object> redisTemplate;
public RedisUtil(@Qualifier("userRedisTemplate") RedisTemplate<String, UserInfoDTO> userRedisTemplate,
@Qualifier("redisTemplate") RedisTemplate<String, Object> redisTemplate) {
this.userRedisTemplate = userRedisTemplate;
this.redisTemplate = redisTemplate;
}
/**
* redis中存放的token的key的形式为: "sso:token:ss23r7s8s6ssdf2ssssss" PREFIX + uuid
*/
private static final String PREFIX = "sso:token:";
/**
* 添加token到缓存
* @param token token
* @param user 用户信息
* @param timeout token过期时间
*/
public boolean addUserToken(String token, UserInfoDTO user, Integer timeout){
token = PREFIX + token;
try {
userRedisTemplate.opsForValue().set(token, user, timeout, TimeUnit.SECONDS);
} catch (Exception e) {
log.error("redis添加登录用户信息失败! userInfo: {} e: {}" , user, e);
throw new BusinessException("redis添加登录用户信息失败! userInfo: " + JSON.toJSONString(user));
}
return true;
}
/**
* 根据token获取用户
* @param token token
* @return 当前用户
*/
public UserInfoDTO getUserByToken(String token) {
token = PREFIX + token;
UserInfoDTO user = null;
try {
user = userRedisTemplate.opsForValue().get(token);
} catch (Exception e) {
log.error("redis添加获取用户信息失败! token:{}, e:{}" , token, e);
}
return user;
}
}
项目2
com.knowledge:home-1.0.0
通过maven依赖项目1
<dependencies>
<dependency>
<groupId>com.knowledge</groupId>
<artifactId>core</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
在项目2中注入项目1中的bean
想请问为什么无法注入bean,以及工具类的jar包中如何写才能被注入?
项目1打包方式
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
@SpringBootApplication(scanBasePackages = "com.knowledge")
试试这个是互相,,包扫描路径问题
但是像我在项目2中直接注入RedisTemplate<String,String> redistemplate 的时候是可以注入成功的,但是注入我再项目1封装后的RedisUtil就失败了,看了一圈源码也没看明白人家是怎么写的。
万一以后别的项目再引用这个包,前缀不相同了,比如项目2改成了com.blog.bowen呢,总在启动类上加扫描包也不是办法,想做一个直接依赖就能注入的。