springboot 启动时遇到的问题
- 1.项目配置文件完全没有错,但是启动的时候 jpa 不自动建表
- 2.启动没有任何问题,controller 编写再三确认,但是启动以后 controller 无法访问。
- 3.肯定还有其他的问题,但是我还没有发现。
原因
以上问题的罪魁祸首,就是我自己手贱,把 springboot 的启动 类,自己建了个包放进去了。
原因嘛,就是因为我觉得其他的类都放在包里面,就这一个没有单独的包……而且为了代码结构看起来整洁,所以,脑抽建了个包,如下图:
就是这样啦,建了个 boot 包,然后把那个 app 改名 booter.java (自作聪明==自讨苦吃),看起来就是不一样了是吧。
然后问题就来了,首先,我创建了实体类,并且加了注解:
类似下面这样,写了几个实体类。
我的实体类
package com.hpwenxue.domain;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Roles {
@Id
@GeneratedValue
private Integer id;
private String name;
private Date createTime;
private Date updateTime;
@Override
public String toString() {
return "Roles [id=" + id + ", name=" + name + ", createTime=" + createTime + ", updateTime=" + updateTime + "]";
}
public Roles(){
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
然后,我配置了 jpa,像下面这样:
我的配置文件
server:
port: 8088
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/hp_wenxue
username: root
password: root
jpa:
show-sql: true
hibernate:
ddl-auto: create
thymeleaf:
encoding: UTF-8
cache: false
# mode: HTML5
# prefix: classpath:/templates/
# suffix: .html
# 首次启动项目可以将ddl-auto 改为 create ,将会自动创建表结构
# 数据库需要手动创建好
OK, 启动项目。。。奇怪了,数据库没有变化,没有自动建表。。。再三确认配置文件和注解,都是没有问题的,于是,尝试改了依赖的版本,改了配置文件,都是没有成功的。
我就奇了怪了,这个东西我之前是有做过的,但是都是没问题的,现在怎么会有这种问题呢?
由于要出去吃饭了,所以我就想既然项目能启动起来,就先试试 controller
能不能跑通吧?试了一下,依然是跑不通的。
我到底经历了什么鬼?
经过几百种尝试已经百度之后,我就重新建了一个项目,简单的配置后编写一个实体类,一执行:数-据-库-有-表-了.....,然后写了个 controller
,一请求,又-成-功-了.....。……
我把新建的项目和我原本的项目进行仔细的对比————最大的不同,就是我自己给 springboot 的启动类 App.java
建了个包,还和 controller
和 domain
包是同级的,于是我把这个 App.java
放回人家原本的位置。启动项目。OK ,什么问题都没有了。
我。。。我 不服
我想可能是 springboot 在启动的时候,就已经去读 controller
和 实体类了,或者对这两个东西做了什么操作了。但是由于包的原因,他没有找到这两个,所以被忽略了。当然,我也只是瞎猜,其中缘由我目前还是不知道的,如有大神知晓,烦请告知,不甚感激
- 为了证明我的猜想,我又做了如下验证:
1.把
App.java
放在controller
的根目录
2.把App.java
放在entity
的根目录
3.把App.java
放在所有包的最外层目录
结论如下:
1.
controller
能访问,数据库不能自动建表。
2. 数据库能自动建表,但是controller
不能访问。
3. 数据库能自动建表,controller
也能正常访问。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于