问题
项目中遇到了配置多数据源中,其中有部分数据源在配置文件中未配置连接信息时,不对未配置的数据源进行加载,并保证服务可正常启动。
解决
使用@ConditionalOnProperty来控制注入的数据源是否生效,服务层中使用@Autowried注入持久层时加上(required = false)
具体代码
配置文件application.properties中数据源的配置为
# Oracle数据源配置 --- 参考代码 配置信息不全 customdb为自定义的
spring.datasource.customdb.url=jdbc:oracle:thin:@127.0.0.1:1521/orcl
spring.datasource.customdb.username=scott
spring.datasource.customdb.password=123@pwd
# 驱动
spring.datasource.customdb.driver-class-name=oracle.jdbc.OracleDriver
# 自定义的数据源类型,值为 要使用的连接池实现的完全限定名
spring.datasource.customdb.type=com.zaxxer.hikari.HikariDataSource
# 连接池中允许的最小连接数。缺省值:10
spring.datasource.customdb.hikari.minimum-idle=5
# 连接池中允许的最大连接数。缺省值:10
spring.datasource.customdb.hikari.maximum-pool-size=20
# 自动提交
spring.datasource.customdb.hikari.auto-commit=true
# 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟
spring.datasource.customdb.hikari.idle-timeout=50000
# 连接池名字 连接池的用户定义名称,主要出现在日志记录和JMX管理控制台中以识别池和池配置
spring.datasource.customdb.hikari.pool-name=FlyduckHikariCP
# 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒
spring.datasource.customdb.hikari.max-lifetime=1800000
# 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒
spring.datasource.customdb.hikari.connection-timeout=30000
# 数据库连接测试语句
spring.datasource.customdb.hikari.connection-test-query=SELECT 1 FROM DUAL
# 当值为false时不会加载被@ConditionalOnProperty(prefix = "customdb", name = "enable", havingValue = "true")注解的配置
customdb.enable=true
MybatisCustomdbConfig.class配置类
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring