若依微服务部署中遇到的各种问题
1、部署完nacos,启动RuoYiSystemApplication时,报数据信息不存在
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
【分析】从现象看,是没读取到数据库url,即没有读取到配置文件。由于第一使用nacos配置中心,也不知道是我的配置文件命名错误还是其他什么问题。将配置文件直接写入bootstrap.yml中依然报错,排除nacos配置文件命名问题。
备注:Data ID 的完整规则格式如下
{prefix}-{spring.profiles.active}.{file-extension}
prefix是spring.application.name,这里为ruoyi-system,结合active=dev,配置DataID为ruoyi-system-dev.yml没有问题。
后来发现是配置文件中,将数据库配置写到master下了,这是从其他一个多数据源工程中拷贝下来的。删除master后可以正常访问了。
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: password
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
2、启动时报Invalid bound statement (not found)
经查公共配置文件application-dev.yml将mybatis配置成了mybatis-plus
mybatis:
mapper-locations: classpath*:/mapper/**/*Mapper.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.ruoyi.**.domain
image.png
3、认证中心启动报错
Failed to bind properties under 'spring.datasource.type' to java.lang.Class<javax.sql.DataSource>:
解决方法,添加依赖
<!--阿里数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.4</version>
</dependency>
4、登录时登录接口dev-api/auth/login报404 NOT_FOUND
启动了RuoYiGatewayApplication、RuoYiAuthApplication、RuoYiSystemApplication三个服务,报404说明网关没有注册。
【解决方案】在网关工程的yml文件中添加
# 权限模块
- id: ruoyi-auth
uri: http://localhost:9200/
predicates:
- Path=/auth/**
filters:
- StripPrefix=1
image.png
5、登录接口dev-api/auth/login报“令牌不能为空”
Gateway有很多的全局过滤器GlobalFilter,若依自定义了一个全局过滤器AuthFilter
其中设置了过滤白名单。
# 不校验白名单
ignore:
whites:
- /auth/logout
- /auth/login
- /*/v2/api-docs
- /csrf
写到最外层就可以了,如图。
image.png