社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
虚拟机Ubuntu上运行的容器:
1.新建普通maven项目作为父级maven模块
src删掉
2.添加子模块(依旧是普通maven项目)
注意:
直接从根路径开始导,避免后面改路径的麻烦。
用的是springboot的依赖,不能直接把ssm的依赖全放进来,看什么报错导什么依赖。
3.mapper里面引入的没有写全类限定名,需要起别名。
在provider的application.properties添加
#起别名 对应父级maven中mapper.xml的resultType
mybatis.type-aliases-package: com.kgc.model
#对应的mapper.xml是这样的
<select id="getById" resultType="ItripAreaDic">
XXXXXX
</select>
4.不能放jedis依赖,不能引jedis构建的redisUtils。导入如下redis依赖,降项目的版本为1.5.9。因为1.5.9才支持该redis依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
相应的redisUtils类应使用RedisTemplate去编写:
package com.kgc.utils;
@Component
public class RedisUtil {
@Autowired
StringRedisTemplate stringRedisTemplate;
@Autowired
RedisTemplate<Object, Object> redisTemplate;
@Resource(name = "stringRedisTemplate")
ValueOperations<String, String> valOpsStr;
@Resource(name = "redisTemplate")
ValueOperations<Object, Object> valOpsObj;
/**
* 根据指定key获取String
*
* @param key
* @return
*/
public String getStr(String key) {
return valOpsStr.get(key);
}
/**
* 设置Str缓存 public boolean set(String key, String value)
*
* @param key
* @param val
*/
public void setStr(String key, String val) {
valOpsStr.set(key, val);
}
/***
* 设置Str缓存 public boolean set(String key, int seconds, String value)
* @param key
* @param val
* @param expire 超时时间
*/
public void setStr(String key, String val, Long expire) {
valOpsStr.set(key, val, expire, TimeUnit.MINUTES);
}
/**
* 删除指定key
*
* @param key
*/
public void del(String key) {
stringRedisTemplate.delete(key);
}
/**
* 根据指定o获取Object
*
* @param o
* @return
*/
public Object getObj(Object o) {
return valOpsObj.get(o);
}
/**
* 设置obj缓存
*
* @param o1
* @param o2
*/
public void setObj(Object o1, Object o2) {
valOpsObj.set(o1, o2);
}
/**
* 删除Obj缓存
*
* @param o
*/
public void delObj(Object o) {
redisTemplate.delete(o);
}
/***
* 加锁的方法
* @return
*/
public boolean lock(String key, Long expire) {
RedisConnection redisConnection = redisTemplate.getConnectionFactory().getConnection();
//设置序列化方法
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
if (redisConnection.setNX(key.getBytes(), new byte[]{1})) {
redisTemplate.expire(key, expire, TimeUnit.SECONDS);
redisConnection.close();
return true;
} else {
redisConnection.close();
return false;
}
}
/***
* 解锁的方法
* @param key
*/
public void unLock(String key) {
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.delete(key);
}
//(改造爱旅行时新加的方法)key是否存在
public boolean exist(String key) {
//这样获取不到 还要序列化一下
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate.hasKey(key);
}
//(改造爱旅行时新加的方法)根据key获取过期时间
public Long getTime(String key){
stringRedisTemplate.setKeySerializer(new StringRedisSerializer());
return stringRedisTemplate.getExpire(key);
}
}
5.mapper.xml的namespace注意对应父级Maven中dao模块的路径
<mapper namespace="com.kgc.mapper.ItripAreaDicMapper">
XXXXXX
</mapper>
6.注意添加mapper.xml的扫描配置
#检查基础模块(父级shop-common中的dao模块,resources中包名为mapper)
mybatis.mapper-locations=classpath:mapper/*.xml
7.itrip-common-dao子模块中的类要添加@Mapper注解
import org.apache.ibatis.annotations.Mapper;
8.itrip-common-dto中包括dto,exception,vo这些的类都不需要添加注解。
但是要注意,当mapper.xml中用到vo类时,要写全限定类名。
9.itrip-common-model实体模块中的类要实现序列化,否则无法执行dubbo服务。
注意要在配置文件中配置别名,详情查看第3条。
public class ItripAreaDic implements Serializable {}
10.itrip-common-service中放的增删改查分页的接口,不写注解。
11.itrip-common-utils中放common(如:Constants)、config、utils,common和utils不写注解。
config配置类要写注解,还要在用到所在接口的consumer项目的application.properties中进行配置。
@Component
@ConfigurationProperties(prefix = "systemConfig")
public class SystemConfig {}
基础模块创建完毕,install成功后。创建springboot项目(选为web)provider
1.降版本为1.5.9
2.pom导依赖dubbo、zk、fastjson
3.启动类加注解@EnableDubboConfiguration
4.写配置文件application.properties
最基本的要配置dubbo、dataSource、redis。
5.建立实现类service.impl
service的包路径要和父级Maven模块的包路径保持一致,否则扫描不到,如下:
注意:
业务不要放provider里,只放增删改查和分页,这些代码生成器生成的内容。运行provider成功后,登录dubbo检查服务,应用中是否有provider,服务中检查impl,是否有注册到注册中心。
6.service.impl中的类添加注解:
@Component
@Service(interfaceClass = ItripAreaDicService.class)
//@Service("itripAreaDicService")
public class ItripAreaDicServiceImpl implements ItripAreaDicService {
@Resource
private ItripAreaDicMapper itripAreaDicMapper;
public ItripAreaDic getById(Long id)throws Exception{
return itripAreaDicMapper.getById(id);
}
}
注解@Component、@Service、@Resource分别引用自:
import org.springframework.stereotype.Component;
import com.alibaba.dubbo.config.annotation.Service;
import javax.annotation.Resource;
创建springboot项目(选为web)auth-consumer
1.降版本为1.5.9
2.pom导依赖dubbo、zk、fastjson
3.启动类加注解
4.写配置文件application.properties
consumer中不要dao依赖
5.建controller、service.impl
业务impl命令为LocalXXXXXX
引入提供者服务的service接口使用注解@Reference,引入父级maven模块的service类使用注解@Resource或@Autowired,引入本consumer项目中的service接口使用@Resource。
注意:如果consumer中没有用到@Reference这个注解,该consumer项目是不会注册到dubbo容器中的。
1.报错ibatis方法异常,检查dao方法和mapper.xml对应的方法名是否一致。
2.ibatis dao 报错解决:
namespace
mapper注解
mapper包扫描
3.全部都检查完毕确定没有问题,但是仍然报错包找不到的空指针异常。
就到maven本地库,找到打包出的文件,打开检查本地写的项目和打包出来的项目是否一致,发现不一致,就删掉maven库,clean清掉target,重新install。
4.报错Cannot determine embedded database driver class for database type NONE。
解决思路:
itrip-auth-consumer里面不能导itrip-common-dao的依赖
启动类加了@EnableDubboConfiguration 的注解
上述2种都没问题,启动类添加配置:
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
依旧报错,检查父级maven模块中,有关于solr的3个类放到了itrip-common-utils子模块,由于itrip-auth-consumer项目导入了itrip-common-utils依赖,所以需要在该项目中配solr,尽管该项目没有接口用到solr。
所以建议把solr单独放到一个子模块中,需要时引入依赖并在相应的项目配置。
//Searchdb类位于父级maven项目的itrip-common-utils子模块中
package com.kgc.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "searchdb")
public class Searchdb {
private String baseUrl;
public String getBaseUrl() {
return baseUrl;
}
public void setBaseUrl(String baseUrl) {
this.baseUrl = baseUrl;
}
}
application.properties中solr的配置
# solr配置
# 配置solr核心
searchdb.baseUrl=http://localhost:8080/solr/hotel
# 配置solr网址
spring.data.solr.host=http://localhost:8080/solr
solr的依赖用这个
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-solr</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!