1. 程式人生 > >初學spring boot踩過的坑

初學spring boot踩過的坑

9.png field ted require order false test boot mysql-

一、搭建spring boot環境

  maven工程

      pom文件內容

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qm.demo</groupId>

<artifactId>springbootDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
</parent>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>MySQL</groupId>
<artifactId>mysql-connector-Java</artifactId>
<version>5.0.8</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional><!-- optional=true,依賴不會傳遞,該項目依賴devtools;之後依賴myboot項目的項目如果想要使用devtools,需要重新引入 -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<!-- <build>
<plugins>
java編譯插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8080</port>
<path>/</path>

<url>http://192.168.25.135:8080/manager/text</url>
用戶名
<username>tomcat</username>
密碼
<password>tomcat</password>
</configuration>
</plugin>
</plugins>
</build>
-->
</project>

項目目錄結構

技術分享

  其中springTest類是spring boot內部tomcat啟動時要運行的類

其中內容如下

package com.qm;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

import com.qm.controller.UserController;

@SpringBootApplication
public class SpringTest {

public static void main(String[] args) {
SpringApplication.run(SpringTest.class, args);
}
}

Application類的作用是外部服務器啟動spring boot所要做的一些事。內容如下

package com.qm;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan
public class Application extends SpringBootServletInitializer{
/**
* 實現SpringBootServletInitializer可以讓spring-boot項目在web容器中運行
*/
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
builder.sources(this.getClass());
return super.configure(builder);
}

public static void main(String[] args) {
SpringApplication.run(Application.class, args);

}
}

application.properties文件內容如下

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3309/springbootdemo
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.devtools.livereload.enabled=true

//熱部署,需要提供的路徑
spring.devtools.restart.additional-paths=src\\main\\java\\com\\qm
spring.thymeleaf.cache=false

踩過的坑

坑一,

一開始以為文件目錄,可以隨便放,經過坑一的教訓,才知道代碼文件存放有一定的順序

如上項目結構圖,其中springtest類和application類一定要放在最外面的包裏,如com.qm 當啟動spring boot時,它會去加載com.qm包及其子包下的所有類,

當你不按順序時,[email protected],會報以下錯誤

Description:

Field userService in com.qm.controller.UserController required a bean of type ‘com.qm.service.UserService‘ that could not be found.

Action:

Consider defining a bean of type ‘com.qm.service.UserService‘ in your configuration.
,即bean找不到。,這是應該註意代碼順序。

坑二

補齊坑一後,在service層的接口繼承jpa,然後在controller層使用註入的service方法會報以下錯誤

Error creating bean with name ‘dataController‘: Unsatisfied dependency expressed through field ‘personRepository‘; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘personRepository‘: Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property auto found for type Person!

這是因為hibernate版本的問題,

只要加上

<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>4.1</version>

這個依賴即可

添加之後,若maven倉庫中有該jar包,最好刪掉,編譯時重新下載


若spring boot正常啟動,而地址欄訪問不到controller,則此時應該註意,spring boot啟動時,未掃描到controller類,

在spring boot入口類上再添加一個註解

@ComponentScan("要掃描的包名")

以上就是我在學spring boot時遇到過得一些坑。



初學spring boot踩過的坑