前言
没什么好说的,我相信碰见这种错基本上都很难受,这一看关键字,咱就会想这是数据库没有配置信息啊,嗯没错是的,可是咱们的项目也很简单,基本都是默认配置文件application.yml,怎么会没有呢?有点意思啊,哈哈 直接开怼就完事了。
依赖是否全面
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
<version>${server.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>${server.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.xwl</groupId>
<artifactId>common-server</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.netflix.servo</groupId>
<artifactId>servo-core</artifactId>
<version>0.10.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.5</version>
</dependency>
</dependencies>
解析common-server服务
这玩意就是咱们常说的工具类或者公共服务,大家接触过分布式项目的不用我多说了哈。总之就是我的业务服务引用了它(也就是我要用它的东西,例如:实体,工具类,异常信息抛出等
可就是这玩意让我进了坑,工程根据正常流程走,打成jar包,一运行直接GG
Cannot determine embedded database driver class for database type NONE
公共服务(核心)依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<!--<version>5.0.4.RELEASE</version>-->
<version>4.3.24.RELEASE</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
</dependencies>
看了一下也没问题啊,该有的依赖都有,而且我这个公共服务也不需要实际的jar只需提供给外部服务引入其中的API即可
于是-排除依赖是否全面问题
百度出的解决方案
1.SpringBoot默认加载自己的数据源,咱需排除这个数据源
根据提示修改配置文件:
autoconfigure:
exclude: org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
看着很有理,运行直接再报错,那就是没用了呗
启动类排除默认数据源(道理和上面一样的)
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
没错,依然GG
2.有个人给了这样一个依赖,是一个hibernate的依赖,如下
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
这个依赖一添加,再次重新打包,运行!竟然没报错----
可是问题来了:这个依赖据我所知是Hibernate的,它的意思就是我的java程序运行后自动生成一个数据源信息,但是大家忘记了一个东西,它生成的就是我们要的吗?并非如此,这样一来程序是运行起来了,但是数据库确连不上,可以说一点用没有,我们要解决的是实际问题,而不是单纯的不让它报错~
解决问题步骤:
针对如下场景可参考我这个方案
1.打开你程序工程,确保你编译完成后,配置文件和基本java文件已全部编译完成在target
2.解压程序目录target下的jar包,查看字节码文件目录,
进入目录
D:\myProject\my-web-project\my-xue\other-server\target\other-server-1.0-SNAPSHOT\BOOT-INF\classes下查看如图所示
3.解决办法:pom文件添加读取配置文件路径信息
整个build工程配置信息如下
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
核心就是这里,要和你的配置文件存放目录路径保持一致
<resource>
<directory>src/main/resources</directory>
</resource>
这样的话就OK了,完事之后你重新打包编译再次运行java-jar ```````
感悟
最后实际解决问题也就添加了三行代码,可就是这三行代码让我心里也挺高兴,也许这就是程序的魅力所在吧,记录一下问题,分享给其它码农们,加油~
联系我
如果你没解决问题,联系我,我很乐意和你一起探讨
Q:2509647976
WX: x331191249