簡體   English   中英

Spring Boot 應用程序啟動失敗,找不到 bean

[英]Spring Boot application failed to start, bean could not be found

我的 Spring Boot 應用程序將無法啟動,因為找不到 bean。 我做了很多調查,並嘗試過很多次嘗試解決這個問題,但沒有一個奏效。 以下是常見的問題(以及為什么他們沒有為我解決它)。 任何幫助或建議將不勝感激。

問題的潛在原因

  1. 沒有在正確的位置聲明主類

    我的文件夾結構如下所示。 我相信這是結構應該避免任何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
  2. 類沒有用 @Repository 等注解聲明

    我的代碼在下面,我不相信這是真的

  3. 這個答案建議從上面的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM