2

I recently started using Eclipse (moved from IntelliJ Idea) but whatever new SpringBoot app I start writing, I always get this problem. The @SpringBootApplication on my main class does not work as intended. I should be able to get away without adding the @ComponentScann annotation (I know it would make it work), but the intention of this post is to find out the route cause of the original failure. I already know work-arounds. My app always breaks with the following error message:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.3.RELEASE)

2018-07-18 13:51:22.026  INFO 13936 --- [  restartedMain] c.g.w.WorkplaceloggerApplication         : Starting WorkplaceloggerApplication on G488LTN2E with PID 13936 (C:\Projects\workplacelogger\bin\main started by 212704468 in C:\Projects\workplacelogger)
2018-07-18 13:51:22.026  INFO 13936 --- [  restartedMain] c.g.w.WorkplaceloggerApplication         : No active profile set, falling back to default profiles: default
2018-07-18 13:51:22.075  INFO 13936 --- [  restartedMain] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@7f70a763: startup date [Wed Jul 18 13:51:22 CEST 2018]; root of context hierarchy
2018-07-18 13:51:22.959  INFO 13936 --- [  restartedMain] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'httpRequestHandlerAdapter' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration; factoryMethodName=httpRequestHandlerAdapter; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration; factoryMethodName=httpRequestHandlerAdapter; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]]
2018-07-18 13:51:23.592  INFO 13936 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2018-07-18 13:51:23.609  INFO 13936 --- [  restartedMain] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2018-07-18 13:51:23.609  INFO 13936 --- [  restartedMain] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.31
2018-07-18 13:51:23.609  INFO 13936 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jre1.8.0_171\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jre1.8.0_171/bin/server;C:/Program Files/Java/jre1.8.0_171/bin;C:/Program Files/Java/jre1.8.0_171/lib/amd64;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Java\jdk1.8.0_171;C:\Program Files\Git\cmd;C:\ProgramData\chocolatey\bin;C:\Program Files\Java\jdk1.8.0_171\bin;C:\Program Files\nodejs\;C:\Python27\;C:\Python27\Scripts\;C:\ChromeDriver\;;C:\Program Files\Cloud Foundry;C:\Users\212704468\AppData\Local\Microsoft\WindowsApps;C:\Users\212704468\AppData\Roaming\npm;C:\Program Files\Microsoft VS Code\bin;C:\Users\212704468\AppData\Local\Programs\Fiddler;C:\sts-bundle\sts-3.9.4.RELEASE;;.]
2018-07-18 13:51:23.758  INFO 13936 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2018-07-18 13:51:23.758  INFO 13936 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1683 ms
2018-07-18 13:51:23.892  INFO 13936 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]
2018-07-18 13:51:23.908  INFO 13936 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2018-07-18 13:51:23.909  INFO 13936 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-07-18 13:51:23.909  INFO 13936 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2018-07-18 13:51:23.909  INFO 13936 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2018-07-18 13:51:23.942  WARN 13936 --- [  restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'eventServiceDbImpl': Unsatisfied dependency expressed through field 'eventRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.ge.workplacelogger.repositories.EventRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
2018-07-18 13:51:23.942  INFO 13936 --- [  restartedMain] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2018-07-18 13:51:23.959  INFO 13936 --- [  restartedMain] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2018-07-18 13:51:24.159 ERROR 13936 --- [  restartedMain] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Field eventRepository in com.ge.workplacelogger.services.EventServiceDbImpl required a bean of type 'com.ge.workplacelogger.repositories.EventRepository' that could not be found.


Action:

Consider defining a bean of type 'com.ge.workplacelogger.repositories.EventRepository' in your configuration.

So, here is the code that I am using

Main class:

package com.ge.workplacelogger;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class WorkplaceloggerApplication {

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

    }
}

Repository interface:

package com.ge.workplacelogger.repositories;

import java.util.List;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

import com.ge.workplacelogger.models.Event;
import com.ge.workplacelogger.models.Worker;


@Repository
public interface EventRepository extends CrudRepository<Event, Integer> {

  void saveEvent(Event event);

  void deleteEvent(Event event);

  List<Event> findAllEvents();

  Event findEventByEventId(Integer eventId);

  List<Event> findEventsByWorker(Worker worker);
}

and finally, the Service where I would like to @Autowire the EventRepository:

package com.ge.workplacelogger.services;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ge.workplacelogger.models.Event;
import com.ge.workplacelogger.models.Worker;
import com.ge.workplacelogger.repositories.EventRepository;

@Service
public class EventServiceDbImpl implements EventService {

  @Autowired
  EventRepository eventRepository;

  @Override
  public void saveEvent(Event event) {
    eventRepository.saveEvent(event);
  }

  @Override
  public void deleteEvent(Event event) {
    eventRepository.deleteEvent(event);
  }

  @Override
  public List<Event> findAllEvents() {
    return eventRepository.findAllEvents();
  }

  @Override
  public Event findEventByEventId(Integer eventId) {
    return eventRepository.findEventByEventId(eventId);
  }

  @Override
  public List<Event> findEventsByWorker(Worker worker) {
    return eventRepository.findEventsByWorker(worker);
  }
}

As far as I understand, the @SpringBootApplication on my main class (in package com.ge.workplacelogger) will work as @ComponentScan on all subpackages. All my services, repositories, models are in a subpackage of the package com.ge.workplacelogger, so I really have no ide what goes wrong. It might be a ridiculous question, but does it have anything to do with Eclipse? Never had any problem with IntelliJ before.

Thank you very much for the answer in advance!

EDIT: Here is my entity as well for evaluation.

package com.ge.workplacelogger.models;

import java.time.LocalDateTime;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table
public class Event {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Integer eventId;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "workerId")
  private Worker worker;

  private boolean logIn;
  private LocalDateTime timestamp;
  private String comment;

  public Event() {
  }

  public Event(Integer eventId, Worker worker, boolean logIn, LocalDateTime timestamp, String comment) {
    this.eventId = eventId;
    this.worker = worker;
    this.logIn = logIn;
    this.timestamp = timestamp;
    this.comment = comment;
  }

  public Integer getEventId() {
    return eventId;
  }

  public void setEventId(Integer eventId) {
    this.eventId = eventId;
  }

  public Worker getWorker() {
    return worker;
  }

  public void setWorker(Worker worker) {
    this.worker = worker;
  }

  public boolean isLogIn() {
    return logIn;
  }

  public void setLogIn(boolean logIn) {
    this.logIn = logIn;
  }

  public LocalDateTime getTimestamp() {
    return timestamp;
  }

  public void setTimestamp(LocalDateTime timestamp) {
    this.timestamp = timestamp;
  }

  public String getComment() {
    return comment;
  }

  public void setComment(String comment) {
    this.comment = comment;
  }

  @Override
  public String toString() {
    return "Event [eventId=" + eventId + ", worker=" + worker + ", logIn=" + logIn + ", timestamp=" + timestamp
        + ", comment=" + comment + "]";
  }
}

EDIT 2: Build.gradle:

buildscript {
    ext {
        springBootVersion = '2.0.3.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.ge'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}


dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-data-rest')
    compile('org.springframework.boot:spring-boot-starter-jdbc')
    compile('org.springframework.boot:spring-boot-starter-thymeleaf')
    compile('org.springframework.boot:spring-boot-starter-web')
    runtime('org.springframework.boot:spring-boot-devtools')
    runtime('org.postgresql:postgresql')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

EDIT 3: Here is the end of the super-long report that could not be inserted in here :) debug = true

Exclusions:
-----------

    org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration


Unconditional classes:
----------------------

    org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration

    org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration

    org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration

    org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration

    org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration



2018-07-18 16:49:24.410 DEBUG 7068 --- [  restartedMain] o.s.b.d.LoggingFailureAnalysisReporter   : Application failed to start due to an exception

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:686) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1210) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:625) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:444) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1256) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1105) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:503) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:312) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:131) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1611) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1363) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:580) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:503) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:251) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:584) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:373) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1350) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:580) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:503) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at com.ge.workplacelogger.WorkplaceloggerApplication.main(WorkplaceloggerApplication.java:14) [main/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_171]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_171]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_171]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_171]
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-2.0.3.RELEASE.jar:2.0.3.RELEASE]

2018-07-18 16:49:24.411 ERROR 7068 --- [  restartedMain] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Field eventRepository in com.ge.workplacelogger.services.EventServiceDbImpl required a bean named 'entityManagerFactory' that could not be found.


Action:

Consider defining a bean named 'entityManagerFactory' in your configuration.

EDIT 4: Application.properties

spring.datasource.url=jdbc:postgres://localhost:5432/workplacelogger
spring.datasource.username=postgres
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=create-drop
spring.logging.level.org.hibernate.SQL=debug
spring.jpa.show-sql=true pring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
debug=true
Bence
  • 119
  • 1
  • 11
  • @SpringBootApplication @ComponentScan("com.ge.workplacelogger") --> add this line – JavaLearner1 Jul 18 '18 at 12:16
  • The intention of my post is that I should not add anything in order to make ComponentScan function as it is intended by default. It also fails with the @ComponentScan("com.ge.workplacelogger") annotaion, but I can make it work by adding each and every package to the componentscan. – Bence Jul 18 '18 at 12:20
  • Can you start it with `debug=true` to see the autoconfiguration report? – Darren Forsythe Jul 18 '18 at 12:33
  • It looks like you're using JPA and I can't see any sign in the logs of Hibernate initialising. That makes me wonder if your application has a missing or corrupted dependency. Can you please update your question with details of your application's dependencies (from your pom.xml or build.gradle) and also, as Darren Forsythe has suggested, the condition evaluation report? – Andy Wilkinson Jul 18 '18 at 13:26
  • Remove all of your methods from the `EventRepository` (those are already provided by Spring Data JPA through the `CrudRepository`, use `save` instead of `saveEvent`, `delete` instead of `deleteEvents` and `findById` instead of `findEventByEventId`). Leave the `findEventsByWorker ` methods. – M. Deinum Jul 18 '18 at 14:54
  • 1
    Add your `application.properties`. There is no datasource to be defined, probably the postgres driver isn't on the class path (as that is a runtime dependency) not sure how Eclipse does that). – M. Deinum Jul 18 '18 at 14:57
  • Deinum, thanks for the comments, I have made the changes already, but the code is still not running due to the original issue.. Of course these changes had no effect on the original issue. – Bence Jul 18 '18 at 15:01
  • are you manually creating the datasource? – Darren Forsythe Jul 18 '18 at 15:21
  • also does running this application outside an IDE work? – Darren Forsythe Jul 18 '18 at 15:26
  • we have tried running it from command line and the error still persists. Also, I have manually created the database in PgAdmin if that answers the datasource question. I will create entities by running the program, but atm. the database is empty – Bence Jul 18 '18 at 15:49

2 Answers2

2

@SpringBootApplication does indeed include the @ComponentScan.

From Getting Started - Building an Application with Spring Boot:

@SpringBootApplication is a convenience annotation that adds all of the following:

@Configuration tags the class as a source of bean definitions for the application context.

@EnableAutoConfiguration tells Spring Boot to start adding beans based on classpath settings, other beans, and various property settings.

Normally you would add @EnableWebMvc for a Spring MVC app, but Spring Boot adds it automatically when it sees spring-webmvc on the classpath. This flags the application as a web application and activates key behaviors such as setting up a DispatcherServlet.

@ComponentScan tells Spring to look for other components, configurations, and services in the hello package, allowing it to find the controllers.

Further reading here on SO: Configuration using annotation @SpringBootApplication

It appears to me that the base of the problem might be the absence of the entityManagerFactory bean which you note in the report. Scrolling back up the report, we'd note the Exclusions section where this appears:

org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

SpringBootApplication exclude when ComponentScanning other @SpringBootApplications helped take me the rest of the way. Your application properties are slightly screwed up. Note this line:

spring.jpa.show-sql=true pring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

I think perhaps this could be 2 lines in your original file. Regardless, the exclusion of the DataSourceAutoConfiguration is probably at fault here. Try removing:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

Community
  • 1
  • 1
Jon Sampson
  • 1,473
  • 1
  • 21
  • 31
  • 1
    I will give it a try tomorrow morning and will come back to you! I hope it will solve the issue. :) Thanks for the comment! – Bence Jul 18 '18 at 19:44
  • I have deleted the line that you mentioned, and the error is the following: Failed to configure a DataSource: no embedded datasource could be configured. Reason: Failed to determine a suitable driver class – Bence Jul 19 '18 at 07:32
  • @Bence you need to set the driver in the propertiest for postgres – Darren Forsythe Jul 19 '18 at 21:10
1

I have found a mistake in the application properties that caused the issue:

original line:

spring.datasource.url=jdbc:postgres://localhost:5432/workplacelogger

correct line:

spring.datasource.url=jdbc:postgresql://localhost:5432/workplacelogger

Also deleted the following line in application properties as the previous "resolver" has suggested:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

The code runs now with some additional minor corrections that are not the subject of this ticket. Here is the evidence that a programmer should step back from time to time to find the route cause of the error :) I was lost in the details and it took a lot of time to find such a "typo" in my home project.

Thank you all for your time!

Bence
  • 119
  • 1
  • 11