복붙노트

[SPRING] Spring Boot - 클래스 경로 자원에 정의 된 이름 'dataSource'로 bean 생성 오류

SPRING

Spring Boot - 클래스 경로 자원에 정의 된 이름 'dataSource'로 bean 생성 오류

스프링 부트 웹 응용 프로그램이 있습니다. RESTful 접근 방식을 중심으로합니다. 모든 설정이 제대로되어있는 것 같지만 어떤 이유로 MainController가 요청을 처리하지 못합니다. 404 오류가 발생합니다. 그것을 고치는 방법?

@Controller
public class MainController {

    @Autowired
    ParserService parserService;

    @RequestMapping(value="/", method= RequestMethod.GET)
    public @ResponseBody String displayStartPage(){
        return "{hello}";
    }
}

신청

@Configuration
@ComponentScan(basePackages = "")
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer{
        public static void main(final String[] args) {
            SpringApplication.run(Application.class, args);
        }

        @Override
        protected final SpringApplicationBuilder configure(final SpringApplicationBuilder application) {
            return application.sources(Application.class);
        }
}

ParserController

@RestController
public class ParserController {

    @Autowired
    private ParserService parserService;

    @Autowired
    private RecordDao recordDao;

 private static final Logger LOG = Logger.getLogger(ParserController.class);

    @RequestMapping(value="/upload", method= RequestMethod.POST)
    public @ResponseBody String fileUploadPage(
   }
}

최신 정보

MySQL이 Spring에 의해 초기화 될 수없는 것처럼 보입니다 ....

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Injection of autowired dependencies failed; 

nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource; 

nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Instantiation of bean failed; 

nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource()] threw exception; 

nested exception is org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.

UPDATE2

application.properties

spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/logparser
spring.datasource.username=root
spring.datasource.password=root

spring.jpa.database = MYSQL
spring.jpa.show-sql = true

# Hibernate
hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql: true
hibernate.hbm2ddl.auto: update
entitymanager.packagesToScan: /

업데이트 4

@RequestMapping이 설정된 경우 라이트 컨트롤러가 응답하지 않는 것 같습니다. 왜 그럴 수 있니?

UPDATE5

또한 튜토리얼에서 설명한대로이 DAO를 사용합니다 ....

public interface RecordDao extends CrudRepository<Record, Long> {
}

http://blog.netgloo.com/2014/10/27/using-mysql-in-spring-boot-via-spring-data-jpa-and-hibernate/

업데이트 6

응용 프로그램 속성을 변경했습니다. 그리고 모든 단일 조합을 시도했지만 작동을 거부합니다. (

메이븐 출력 :

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running IntegrationTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.365 sec <<< FAILURE! - in IntegrationTest
saveParsedRecordsToDatabase(IntegrationTest)  Time elapsed: 2.01 sec  <<< ERROR!
java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:99)
    at org.springframework.test.context.DefaultTestContext.getApplicationContext(DefaultTestContext.java:101)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:331)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:213)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:290)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:292)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:233)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:87)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:176)
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource()] threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.

해결법

  1. ==============================

    1.첫 번째 문제는 자동 구성과 같습니다.

    첫 번째 문제는 자동 구성과 같습니다.

    데이터 소스가 필요없는 경우 자동 구성 프로세스에서 제거하십시오.

    @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
    
  2. ==============================

    2.데이터 소스를 구성하기 위해 Spring Boot에 충분한 데이터를 전달하지 않은 것에서부터

    데이터 소스를 구성하기 위해 Spring Boot에 충분한 데이터를 전달하지 않은 것에서부터

    만들기 / 기존 application.properties에서 다음을 추가하십시오

    spring.datasource.driverClassName=
    spring.datasource.url=
    spring.datasource.username=
    spring.datasource.password=
    

    각 속성에 값을 추가해야합니다.

  3. ==============================

    3.아마도 당신은 MySQL JDBC 드라이버를 잊어 버렸을 것입니다.

    아마도 당신은 MySQL JDBC 드라이버를 잊어 버렸을 것입니다.

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.34</version>
    </dependency>
    
  4. ==============================

    4.같은 오류가 발생했습니다. Spring JPA, Hibernate, Mysql 또는 jackson과 같은 pom.xml에없는 종속성 중 일부가 원인이라는 것을 알았습니다. 따라서 pom.xml에 종속성이 없는지 확인하고 버전 호환성을 확인하십시오.

    같은 오류가 발생했습니다. Spring JPA, Hibernate, Mysql 또는 jackson과 같은 pom.xml에없는 종속성 중 일부가 원인이라는 것을 알았습니다. 따라서 pom.xml에 종속성이 없는지 확인하고 버전 호환성을 확인하십시오.

    <!-- Jpa and hibernate -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>4.2.2.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-entitymanager</artifactId>
                <version>5.0.3.Final</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.6</version>
            </dependency>
    
  5. ==============================

    5.Hibernate. * 속성은 쓸모 없으며 spring.jpa. * 속성이어야합니다. spring.jpa. * 속성을 사용하여 이미 설정된 속성을 덮어 쓰려고하는 것은 아닙니다. (각 속성에 대한 설명을 보려면 Spring Boot 레퍼런스 가이드를 읽어보십시오.

    Hibernate. * 속성은 쓸모 없으며 spring.jpa. * 속성이어야합니다. spring.jpa. * 속성을 사용하여 이미 설정된 속성을 덮어 쓰려고하는 것은 아닙니다. (각 속성에 대한 설명을 보려면 Spring Boot 레퍼런스 가이드를 읽어보십시오.

    spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
    spring.jpa.show-sql = true
    
    # Hibernate
    spring.jpa.hibernate.ddl-auto=update
    

    또한 스캔 할 패키지는 Application 클래스의 기본 패키지를 기반으로 자동 검색됩니다. 다른 것을 지정하려면 @EntityScan 주석을 사용하십시오. 또한 최상위 패키지를 지정하는 것은 성능에 심각한 영향을 줄 수있는 전체 클래스 경로를 검사하므로 현명하지 않습니다.

  6. ==============================

    6.코드 줄 아래로 변경

    코드 줄 아래로 변경

    spring.datasource.driverClassName
    

    spring.datasource.driver-class-name
    
  7. ==============================

    7.spring boot app에서 application.properties를 사용하고 있다면, 아래 라인을 application.properties에 넣으십시오. spring.datasource.url : jdbc : mysql : // google /? cloudSqlInstance = & socketFactory = com.google.cloud.sql.mysql.SocketFactory & user = **** & password = ****

    spring boot app에서 application.properties를 사용하고 있다면, 아래 라인을 application.properties에 넣으십시오. spring.datasource.url : jdbc : mysql : // google /? cloudSqlInstance = & socketFactory = com.google.cloud.sql.mysql.SocketFactory & user = **** & password = ****

  8. ==============================

    8.테스트를 실행하는 동안이 문제가 발생합니다. 종속성 추가

    테스트를 실행하는 동안이 문제가 발생합니다. 종속성 추가

    testCompile group: 'com.h2database', name: 'h2', version: '1.4.197' 
    

    테스트 소스 아래에 폴더 리소스 추가 파일 bootstrap.yml 추가 콘텐츠를 제공합니다.

    spring:
      datasource:
        type: com.zaxxer.hikari.HikariDataSource
        url: jdbc:h2:mem:TEST
        driver-class-name: org.h2.Driver
        username: username
        password: password
        hikari:
          idle-timeout: 10000
    

    그러면 데이터 소스가 설정됩니다.

  9. ==============================

    9.필자의 경우 org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource는 한정자가없는 autowired 필드이고 한정된 이름을 가진 여러 데이터 소스를 사용하기 때문에 이런 일이 발생했습니다. 내 데이터 소스 Bean 구성 중 하나에서 @Primary를 임의로 사용하여이 문제를 해결했습니다.

    필자의 경우 org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource는 한정자가없는 autowired 필드이고 한정된 이름을 가진 여러 데이터 소스를 사용하기 때문에 이런 일이 발생했습니다. 내 데이터 소스 Bean 구성 중 하나에서 @Primary를 임의로 사용하여이 문제를 해결했습니다.

    @Primary
    @Bean(name="oneOfManyDataSources")
    public DataSource dataSource() { ... }
    

    그들은 당신이 AbstractRoutingDataSource를 구현하기를 원한다고 가정합니다. 그런 다음 한정자가 필요 없기 때문에 자동 구성이 제대로 작동합니다. 필요에 따라 Bean이 적절한 DataSource를 확인할 수 있도록하는 단일 데이터 소스 만 있습니다. 그런 다음 @Primary 또는 @Qualifier 주석이 필요하지 않습니다. 단일 DataSource 만 있기 때문입니다.

    어떤 경우 든, 내 bean이 한정자에 의해 DataSource를 지정하고 JPA auto config 항목이 단일 기본 DataSource를 가지고 있기 때문에 행복하기 때문에 내 솔루션이 효과가 있었다. 나는 이것을 일을 "옳은"방법으로 추천하는 것은 결코 아니지만, 제 경우에는 문제를 신속하게 해결하고 눈에 띄는 방식으로 제 행동의 행동을 저지하지 않았습니다. 언젠가 AbstractRoutingDataSource를 구현하고 특정 DataSource를 필요로하는 모든 빈을 리팩터링 한 다음 아마도 더 멋진 솔루션이 될 것입니다.

  10. ==============================

    10.application.properties에 필요한 모든 데이터 소스 속성을 제공 한 후에도이 문제에 직면했습니다. 그렇다면 스프링 부트 Application.java와 다른 패키지 계층 구조에 있었기 때문에 속성 설정 클래스가 스캔되지 않고 데이터 소스 객체에 속성이 적용되지 않았다는 것을 알았습니다. 내 속성 구성 클래스의 패키지 이름을 변경하고 작업을 시작했습니다.

    application.properties에 필요한 모든 데이터 소스 속성을 제공 한 후에도이 문제에 직면했습니다. 그렇다면 스프링 부트 Application.java와 다른 패키지 계층 구조에 있었기 때문에 속성 설정 클래스가 스캔되지 않고 데이터 소스 객체에 속성이 적용되지 않았다는 것을 알았습니다. 내 속성 구성 클래스의 패키지 이름을 변경하고 작업을 시작했습니다.

  11. ==============================

    11.build.gradle의 런타임 그룹에 데이터베이스 종속성이 있는지 확인하십시오.

    build.gradle의 런타임 그룹에 데이터베이스 종속성이 있는지 확인하십시오.

    runtime group: 'com.h2database', name: 'h2', version: '1.4.194'
    

    Maven을 사용하는 경우 테스트에서 런타임으로 범위를 변경하십시오.

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.194</version>
        <scope>runtime</scope>
    </dependency>
    
  12. ==============================

    12.원래의 질문과 직접적으로 관련이 없지만 이것은 누군가에게 유용 할 것입니다. 이 오류는 간단한 두 개의 프로젝트 구조로 인해 발생했습니다. 한 프로젝트는 spring jdbc (A)로 데이터베이스 작업을 처리하고 있고 다른 프로젝트는 전혀 jdbc 작업을 수행하지 못했습니다 (B). 그러나 서비스 B를 시작하는 동안 여전히이 오류가 나타났습니다. 데이터 소스가 제대로 초기화되어야한다고 말하면됩니다.

    원래의 질문과 직접적으로 관련이 없지만 이것은 누군가에게 유용 할 것입니다. 이 오류는 간단한 두 개의 프로젝트 구조로 인해 발생했습니다. 한 프로젝트는 spring jdbc (A)로 데이터베이스 작업을 처리하고 있고 다른 프로젝트는 전혀 jdbc 작업을 수행하지 못했습니다 (B). 그러나 서비스 B를 시작하는 동안 여전히이 오류가 나타났습니다. 데이터 소스가 제대로 초기화되어야한다고 말하면됩니다.

    내가 알기로는이 의존성을 두 모듈의 부모 pom에 추가했다.

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
    

    이로 인해 spring은 프로젝트 B에 대한 jdbc 의존성을 초기화했다. 그래서, 나는 그것을 A의 포옴 (poom)에 옮겼다. 모든 것이 좋았다.

    희망이 누군가를 도울 것입니다.

  13. ==============================

    13.응용 프로그램을 항아리로 실행하고 있습니까? (java -jar xxxx.jar)

    응용 프로그램을 항아리로 실행하고 있습니까? (java -jar xxxx.jar)

    그렇다면 jar 파일에 application.properties가 저장되어 있습니까?

    그렇지 않은 경우 이유를 알아 내려고 시도하십시오.

  14. ==============================

    14.그것은 나를 위해 일했습니다. Tomcat의 VM 옵션에 이것을 추가하십시오

    그것은 나를 위해 일했습니다. Tomcat의 VM 옵션에 이것을 추가하십시오

    -DdevBaseDir="C:\Your_Project_Dir_Path"
    
  15. ==============================

    15.제 경우에는 application.properties 파일에서 다음을 무시했습니다.

    제 경우에는 application.properties 파일에서 다음을 무시했습니다.

    # 최대 절전 모드

    # spring.jpa.hibernate.ddl-auto = update

    그것은 나를 위해 작동 ....

  16. ==============================

    16.이런 종류의 오류가 발생하면 생성 할 수없는 다른 것을 제공하십시오. 테스트 케이스에서 bean 데이터 소스.

    이런 종류의 오류가 발생하면 생성 할 수없는 다른 것을 제공하십시오. 테스트 케이스에서 bean 데이터 소스.

    다음과 같은 이유로 인해 발생할 수 있습니다.

    해결 방법 : @AutoConfigureTestDatabase (replace = AutoConfigureTestDatabase.Replace.NONE)를 추가하여 기본 데이터 소스를 바꾸지 마십시오.

  17. ==============================

    17.나는 며칠 동안 같은 문제에 직면 해 있었고 마침내 문제는 코드와 관련이 없으며 문제는 Maven에서 나왔다. 하드 드라이브에서 다운로드 한 모든 파일을 삭제해야한다 "C : \ Users \ username.m2 \ 리포지토리 "를 만들고 프로젝트에 다른 업데이트를 수행하면 문제가 해결됩니다.

    나는 며칠 동안 같은 문제에 직면 해 있었고 마침내 문제는 코드와 관련이 없으며 문제는 Maven에서 나왔다. 하드 드라이브에서 다운로드 한 모든 파일을 삭제해야한다 "C : \ Users \ username.m2 \ 리포지토리 "를 만들고 프로젝트에 다른 업데이트를 수행하면 문제가 해결됩니다.

  18. ==============================

    18.나는 부모 스프링 부트 의존성의 변화에 ​​대한 나의 문제를 해결했다.

    나는 부모 스프링 부트 의존성의 변화에 ​​대한 나의 문제를 해결했다.

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

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

    자세한 정보는 릴리스 노트를 참조하십시오 : Spring Boot 2.1.0 Release Notes

  19. from https://stackoverflow.com/questions/28042426/spring-boot-error-creating-bean-with-name-datasource-defined-in-class-path-r by cc-by-sa and MIT license