[英]My Spring boot application failed to start: with error 'entityManagerFactory' that could not be found
[英]Spring Boot application failed to start, bean could not be found
我的 Spring Boot 應用程序將無法啟動,因為找不到 bean。 我做了很多調查,並嘗試過很多次嘗試解決這個問題,但沒有一個奏效。 以下是常見的問題(以及為什么他們沒有為我解決它)。 任何幫助或建議將不勝感激。
問題的潛在原因
沒有在正確的位置聲明主類
我的文件夾結構如下所示。 我相信這是結構應該避免任何NoSuchBeanDefinitionException問題。 在這里可能還值得一提的是,這不是我的整個項目。 只是我認為與此問題相關的文件。
文件夾結構
src/ ├── main/ │ └── java/ | ├── mygroup.tqbcbackend/ | | └── TqbcBackendApplication.java | ├── mygroup.tqbcbackend.model/ | | └── Team.java | ├── mygroup.tqbcbackend.controller/ | | └── TeamController.java | └── mygroup.tqbcbackend.repository/ | └── TeamRepository.java └── resources/ └── application.properties
類沒有用 @Repository 等注解聲明
我的代碼在下面,我不相信這是真的
這個答案建議從上面的private TeamRepository teamRepository;
在TeamController.java
這確實導致應用程序啟動,但是調用teamRepository.findAll();
時返回了java.lang.NullPointerException
;
錯誤
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.6.3)
2022-06-20 22:54:18.006 INFO 23052 --- [ restartedMain] m.tqbcbackend.TqbcBackendApplication : Starting TqbcBackendApplication using Java 11.0.15 on OD with PID 23052 (C:\Dev\TheQBCarousel\tqbc-backend\target\classes started by odern in C:\Dev\TheQBCarousel\tqbc-backend)
2022-06-20 22:54:18.007 INFO 23052 --- [ restartedMain] m.tqbcbackend.TqbcBackendApplication : No active profile set, falling back to default profiles: default
2022-06-20 22:54:18.065 INFO 23052 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2022-06-20 22:54:18.067 INFO 23052 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2022-06-20 22:54:19.613 INFO 23052 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2022-06-20 22:54:19.623 INFO 23052 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2022-06-20 22:54:19.624 INFO 23052 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.56]
2022-06-20 22:54:19.867 INFO 23052 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2022-06-20 22:54:19.867 INFO 23052 --- [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1800 ms
2022-06-20 22:54:20.117 WARN 23052 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'teamController': Unsatisfied dependency expressed through field 'teamRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'mygroup.tqbcbackend.repository.TeamRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
2022-06-20 22:54:20.122 INFO 23052 --- [ restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
***************************
APPLICATION FAILED TO START
***************************
Description:
Field teamRepository in mygroup.tqbcbackend.controller.TeamController required a bean of type 'mygroup.tqbcbackend.repository.TeamRepository' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'mygroup.tqbcbackend.repository.TeamRepository' in your configuration.
TeamController.java
package mygroup.tqbcbackend.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import mygroup.tqbcbackend.model.Team;
import mygroup.tqbcbackend.repository.TeamRepository;
@CrossOrigin(origins = "*")
@RestController
@RequestMapping("/api/v1/teams")
public class TeamController {
@Autowired
private TeamRepository teamRepository;
// Get all teams
@GetMapping("/all")
public List<Team> getAllTeams() {
return teamRepository.findAll();
}
// Get all active teams
@GetMapping("/active")
public List<Team> getAllActiveTeams() {
return teamRepository.findByIsActiveTrue();
}
}
TeamRepository.java
package mygroup.tqbcbackend.repository;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import mygroup.tqbcbackend.model.Team;
@Repository
public interface TeamRepository extends JpaRepository<Team,String>{
public List<Team> findByIsActiveTrue();
}
TqbcBackendApplication.java
package mygroup.tqbcbackend;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TqbcBackendApplication {
public static void main(String[] args) {
SpringApplication.run(TqbcBackendApplication.class, args);
}
}
應用程序屬性
####### Data-Source Properties #######
spring.datasource.url=jdbc:mysql://localhost:3306/the_qb_carousel?useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=mypassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
###### JPA Properties ######
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
# Stops SQL column names being automatically renamed to snake case
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.hibernate.ddl-auto=update
#
spring.jpa.properties.hibernate.jdbc.batch_size=16
logging.level.org.hibernate.persister.entity=ERROR
#logging.level.org.hibernate.SQL=DEBUG
#logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
#logging.level.org.hibernate.type=TRACE
###### App Properties ######
tqdm.app.jwtSecret= VerySecretKey
tqdm.app.jwtExpirationMs= 86400000
tqdm.app.frontEndURL=http://localhost:8081
###### Email Properties ######
spring.mail.host = smtp.gmail.com
spring.mail.port = 587
spring.mail.properties.mail.smtp.starttls.enable = true
spring.mail.username = mail@gmail.com
spring.mail.password = password
spring.mail.properties.mail.smtp.starttls.required = true
spring.mail.properties.mail.smtp.auth = true
spring.mail.properties.mail.smtp.connectiontimeout = 5000
spring.mail.properties.mail.smtp.timeout = 5000
spring.mail.properties.mail.smtp.writetimeout = 5000
嗯......,這應該工作? 好吧,您可以強制 Spring 查找存儲庫的特定包。 在您的主服務器上嘗試@EnableJpaRepositories("mygroup.tqbcbackend.repository")
。
從Spring Boot Documetation的示例 12 中竊取
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.