20

My project is using MySQL, JavaFX, Spring Boot, Spring Data JP and Hibernate frameworks/technologies.

This is my POM file.

<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.nubeclick</groupId>
<artifactId>pos</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>POSNubeClick</name>
<description>Sistema de punto de venta (Point Of Sale).</description>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <slf4j.version>1.7.12</slf4j.version>
    <log4j.version>1.2.17</log4j.version>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
    <dependency>
        <groupId>com.miglayout</groupId>
        <artifactId>miglayout-javafx</artifactId>
        <version>5.0</version>
    </dependency>
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
    </dependency>
    <!-- <dependency> -->
    <!-- <groupId>org.slf4j</groupId> -->
    <!-- <artifactId>slf4j-api</artifactId> -->
    <!-- <version>${slf4j.version}</version> -->
    <!-- </dependency> -->
    <!-- <dependency> -->
    <!-- <groupId>org.slf4j</groupId> -->
    <!-- <artifactId>jcl-over-slf4j</artifactId> -->
    <!-- <version>${slf4j.version}</version> -->
    <!-- </dependency> -->
    <!-- <dependency> -->
    <!-- <groupId>org.slf4j</groupId> -->
    <!-- <artifactId>slf4j-log4j12</artifactId> -->
    <!-- <version>${slf4j.version}</version> -->
    <!-- </dependency> -->
    <!-- <dependency> -->
    <!-- <groupId>log4j</groupId> -->
    <!-- <artifactId>log4j</artifactId> -->
    <!-- <version>${log4j.version}</version> -->
    <!-- </dependency> -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.jfoenix</groupId>
        <artifactId>jfoenix</artifactId>
        <version>1.10.0</version>
    </dependency>
    <dependency>
        <groupId>de.jensd</groupId>
        <artifactId>fontawesomefx</artifactId>
        <version>8.9</version>
    </dependency>
    <dependency>
        <groupId>org.controlsfx</groupId>
        <artifactId>controlsfx</artifactId>
        <version>8.40.13</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

This is my .properties configuration.

spring.main.banner-mode=off

# Datasource connection properties
spring.datasource.url=jdbc:mysql://localhost/posnubeclick
spring.datasource.username=nubeclick
spring.datasource.password=nubeclick
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# JPA Properties
spring.jpa.database=posnubeclick

# Hibernate Configuration Properties
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.jpa.properties.hibernate.current_session_context_class=thread
spring.jpa.properties.hibernate.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

# Naming strategy
spring.jpa.hibernate.naming-strategy =org.hibernate.cfg.ImprovedNamingStrategy

#Turn Statistics on
spring.jpa.properties.hibernate.generate_statistics=true

# logging
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
logging.level.org.hibernate.stat=debug
logging.level.org.hibernate.type=trace
logging.level.org.hibernate.SQL=debug
#logging.level.org.hibernate.type.descriptor.sql=trace
logging.level.=error

This is my main class

@SpringBootApplication(scanBasePackages = { "com.nubeclick.pos" })
public class MainApp extends Application {

private static final Logger log = LoggerFactory.getLogger(MainApp.class);

public static void main(String[] args) throws Exception {

    SpringApplication.run(MainApp.class, args);
    // launch(args);
}

@Override
public void start(Stage stage) throws Exception {
    try {
        log.info("Starting Hello JavaFX and Maven demonstration application");

        String fxmlFile = "/fxml/Main.fxml";
        log.debug("Loading FXML for main view from: {}", fxmlFile);
        FXMLLoader loader = new FXMLLoader();
    Parent rootNode = (Parent) loader.load(getClass().getResourceAsStream(fxmlFile));

        log.debug("Showing JFX scene");
        Scene scene = new Scene(rootNode);
        scene.getStylesheets().add("/styles/styles.css");
        stage.setTitle("NubeClick - Point of Sales");
        stage.setScene(scene);
        stage.show();
    } catch (Exception e) {
    // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

This is the stacktrace:

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class

The Spring message is this:

Description: Failed to auto-configure a DataSource: 'spring.datasource.url' is not specified and no embedded datasource could be auto-configured. Reason: Failed to determine a suitable driver class Action: Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the classpath. If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

I have referred to this other post and this other one

I don't know what else to do, maybe start all over again from zero but I want to adapt those frameworks to my current project.

What can I do to solve this?

Crazy thing, I decided to upload the project to another repository, did a whole clean to the project folder (deleted .project, .settings, .classpath, bin, target) and reimported project into eclipse, did configure -> add maven nature, and now the error is gone, at least this error, got some other errors but now it loads everything from the properties file, so, why did this happen?

Links to docs would be appreciated, so I can understand what I have to do.

Neuron
  • 5,141
  • 5
  • 38
  • 59
AjFmO
  • 395
  • 2
  • 4
  • 18

4 Answers4

14

Maybe Spring Boot is not locating your application.properties file at all. Ensure you have this file in the root of the resources folder (in a typical Maven project configuration, it should by located in the src/main/resources folder root).

I suggest you to enable the DEBUG logging level to check if Spring Boot is reading the correct application.properties file.

Riccardo Righi
  • 226
  • 1
  • 6
4

Make sure that you have mysql dependency in your pom.xml or build.gradle file:

compile 'mysql:mysql-connector-java'

or

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

Then you can comment out your driver-class-name property, because spring boot will autoconfigure it for you.

One more thing: It seems that you should connect to concrete port to mysql (by default it is 3306), so make sure that it looks similar to this:

spring.datasource.url=jdbc:mysql://localhost:3306/posnubeclick
mkuligowski
  • 1,544
  • 1
  • 17
  • 27
  • I do have the MySQL dependency in my pom. I forgot to post my pom file. Gonna edit the post to put it there. – AjFmO Apr 29 '18 at 15:08
0

This is what I would do if we were sitting next to each other, comment out a couple lines:

# Datasource connection properties
spring.datasource.url=jdbc:mysql://localhost/posnubeclick
spring.datasource.username=nubeclick
spring.datasource.password=nubeclick
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# JPA Properties
#spring.jpa.database=posnubeclick

Also is your .properties file called application.properties OR bootstrap.properties?

DaShaun
  • 3,722
  • 2
  • 27
  • 29
  • The file is called application.properties, tried bootstrap.properties and got same result, even commenting that line. – AjFmO Apr 29 '18 at 15:23
0

I decided to upload the project to another repository, did a whole clean to the project folder (deleted .project, .settings, .classpath, bin, target) and reimported project into eclipse, did configure -> add maven nature, and now the error is gone, at least this error, got some other errors but now it loads everything from the properties file, so, Why did this happened?

AjFmO
  • 395
  • 2
  • 4
  • 18
  • If you moved resources or renamed them, the project wouldn't necessarily see them without a Clean. Examples of where I've seen this behavior include logging configuration files and properties files. Maybe your file name change on your .properties file was the culprit. – J E Carter II May 13 '19 at 15:14