公司最近主要的工作就是把之前的一个项目进行几乎全面的重构,之所以说几乎全面,是因为除开业务逻辑外全部换血:
框架由spring+struts2+mybatis改为spring boot+jpa
数据库由sybase+h2改为oracle+redis
子系统之间的交互由activemq改为http
代码具体实现全部重写
对一个运行了若干年的项目进行这样的大动作,路程无疑是漫长而复杂的。在进行了一系列设计文档的编写、评审、修订、再评审之后,终于可以开始码代码了。
本以为码代码终于可以松一口气,没想到在框架搭建阶段便遇到了一头拦路虎:
在进行jpa整合的时候,一切配置完成后,却无论如何不能启动项目,日志中打印了如下的异常信息
[ERROR] [2017-09-11 18:11:39.707] org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter.report [LoggingFailureAnalysisReporter.java : 42] |
***************************
APPLICATION FAILED TO START
***************************
Description:
Cannot determine embedded database driver class for database type NONE
Action:
If you want an embedded database please put a supported one on the classpath. If you have database settings to be loaded from a particular profile you may need to active it (the profiles "dev" are currently active).
看这个异常,就是数据库连不上,似乎是配置文件加载不了,但是实际上只要我去掉jpa的jar包,就可以正常运行。
于是网上一顿搜索,但是结果却不尽如人意,看了十几个答案,基本上都是一样的:
原因是:springboot启动时会自动注入数据源和配置jpa
解决:在@SpringBootApplication中排除其注入
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
但是很明显,我就是要用数据库,这样一排除掉自然是启动不报错了,但是我却用不了了,于是我便求助了一下之前专门研究了一段时间jpa的同事。
他看了下我的项目后,说少了h2的jar包,于是在pom.xml中加入了h2的依赖
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.175</version>
</dependency>
没想到加入这个jar之后再次运行项目,还真的是成功启动并连接上数据库了!
只不过,项目虽然成功启动,他却也说不出来为什么要这样改,之所以这样改了,只是因为一个偶然。
后来我也再次查看了项目框架中的代码,依旧没有找到哪里用到了h2,因此这个问题便暂时成为了未解之谜!
由于任务催的紧,一时之间也没有那么多时间深入去探究,只能做个记录,留待后边空闲点了继续刨根问底,也希望知道答案的朋友不吝赐教,感激不尽!