spring boot连接数据库报错问题

一、问题说明

05-17 10:29:37 .669 lmain ERROR org.springtramework. boot. 1iaanostics .LoggingFailureAnalysisReporter 

**************************
APPLICATION FAILED TO START***************************

Description:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class

Action:
Consider the following:
If you want an embedded database (H2,HSQL or Derby), please put it on the classpath.
If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

在这里插入图片描述

这里是spring boot连接数据库,在启动项目时的报错。
这种报错在创建一个新的项目时,填写完配置,在本地启动项目时,很常见的报错。
此问题告知我们,项目启动连接数据库时,找不到配置连接。我们普通的排查是,步骤是查看配置是否书写规范,在查看数据库驱动是否引入。新项目创建一般都是这两个问题引起。
对于这个问题网上还有一种存在的问题,就是spring boot项目没有自动加载到application.yml,那么我们在启动类上添加这个注解就可以了

@SpringBootApplication(exclude={DataSourceAutoConfiguration.calss})

DataSourceAutoConfiguration.class会自动查找application.yml或者properties文件里的spring.datasource.*相关属性并自动配置单数据源

但这次需要说明的问题,却不是以上问题引起的。下面我做个一个简要的说明。
事情是老项目部署新环境中且需要更换就数据库,由原来的的MySQL替换为国产瀚高数据库,我处理的方式是将驱动替换掉,在对配置中的url和driver-class-name进行替换就可以了。除此外我将原来的nacos-config做了去除,因为这是项目的配置基本不会改变,所以做了操作。
这些动作都作完后,在本地启动运行没有任何问题,但一部署到线上环境,就报上面错误。起初还以为是数据库安装问题,找了半天没发现原因,版本也是做了更新还是存在这个问题。
最后发现是启动脚本的问题,之前脚本是针对是nacos-config配置启动脚本。脚本中指定需要nacos-config配置所以出现上面报错,因为我们线上环境没有安装nacos。所以就获取不到配置,导致上面报错。
更改启动脚本就可以了。折腾了一天,好在找到了问题,并顺利启动。

加载nacos-config配置启动项目的.sh脚本

#!/bin/sh
java_option="-Xverify:none -XX:+UseParallelGC -Xms512M -Xmx512M"
for filename in *;
do
if [ "${filename##*.}" = "jar" ]
then
  JAR_NAME=$filename
fi
done
#检查程序是否在运行
is_exist(){
  pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `
  #如果不存在返回1,存在返回0     
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}

#启动方法
start(){
  is_exist
  if [ $? -eq "0" ]; then 
    echo "${JAR_NAME}已经启动, PID=${pid}" 
  else 
    nohup java -server $java_option -jar $JAR_NAME --spring.profiles.active=zdds-test  >> server.log &
    PID=$(echo $!)
    echo "${JAR_NAME}启动成功,PID=$!"
   fi
  }
#停止方法
stop(){
  PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
 if [ -n "$PID" ];then
        echo "$JAR_NAME:准备结束,PID=$PID"
        kill -9 $PID
   PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
        while [ -n "$PID" ]
        do
          PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
        done
        echo "$JAR_NAME:成功结束"
 else
        echo "$JAR_NAME:未运行"
fi
}

status(){
	 PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
 if [ -n "$PID" ];then
         echo "$JAR_NAME:正在运行,PID=$PID"
       else
         echo "$JAR_NAME:未运行"
       fi

}
case "$1" in 
 start)
  start
  ;;
 stop)
  stop
  ;;
 restart)
  stop
  start
  ;;
 status)
  status 
 ;;
 *)
 echo "请输入:start|stop|restart|status"
 exit 1
 ;;
esac

加载项目配置启动.sh脚本

#!/bin/sh
java_option="-Xverify:none -XX:+UseParallelGC -Xms512M -Xmx512M"
for filename in *;
do
if [ "${filename##*.}" = "jar" ]
then
  JAR_NAME=$filename
fi
done
#检查程序是否在运行
is_exist(){
  pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `
  #如果不存在返回1,存在返回0     
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}

#启动方法
start(){
  is_exist
  if [ $? -eq "0" ]; then 
    echo "${JAR_NAME}已经启动, PID=${pid}" 
  else 
    nohup java -server $java_option -jar $JAR_NAME  >> server.log &
    PID=$(echo $!)
    echo "${JAR_NAME}启动成功,PID=$!"
   fi
  }
#停止方法
stop(){
  PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
 if [ -n "$PID" ];then
        echo "$JAR_NAME:准备结束,PID=$PID"
        kill -9 $PID
   PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
        while [ -n "$PID" ]
        do
          PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
        done
        echo "$JAR_NAME:成功结束"
 else
        echo "$JAR_NAME:未运行"
fi
}

status(){
	 PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
 if [ -n "$PID" ];then
         echo "$JAR_NAME:正在运行,PID=$PID"
       else
         echo "$JAR_NAME:未运行"
       fi

}
case "$1" in 
 start)
  start
  ;;
 stop)
  stop
  ;;
 restart)
  stop
  start
  ;;
 status)
  status 
 ;;
 *)
 echo "请输入:start|stop|restart|status"
 exit 1
 ;;
esac

在开发中遇到问题,可以加本人微信进行交流:
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值