Docker-compose with spring-boot and MySQL works incorrect

Viewed 46

I'm trying to build and run docker-compose with spring-boot and MySQL. At the same time I want application.properties to be defined not in project but in docker-compose. When I build and run docker-compose file, the container works but when I try to go to the server with http://localhost:8080/investor/, this site can't be reached. I will be grateful for any help to find where the problem is. My structure of files: enter image description here

My docker-compose.yml:

version: "3"
services:
  mysqldb:
    image: mysql
    restart: unless-stopped
    env_file: ./.env
    environment:
      - MYSQL_ROOT_PASSWORD=$MYSQLDB_ROOT_PASSWORD
      - MYSQL_DATABASE=$MYSQLDB_DATABASE
    ports:
      - "${MYSQLDB_LOCAL_PORT}:${MYSQLDB_DOCKER_PORT}"
    volumes:
      - db:/var/lib/mysql
  app:
    depends_on:
      - mysqldb
    build: .
    restart: on-failure
    env_file: ./.env
    ports:
      - "${SPRING_LOCAL_PORT}:${SPRING_DOCKER_PORT}"
    environment:
      SPRING_APPLICATION_JSON: '{
        "spring.datasource.url"  : "jdbc:mysql://mysqldb:$MYSQLDB_DOCKER_PORT/$MYSQLDB_DATABASE?useSSL=false",
        "spring.datasource.username" : "$MYSQLDB_USER",
        "spring.datasource.password" : "$MYSQLDB_ROOT_PASSWORD",
        "spring.jpa.properties.hibernate.dialect" : "org.hibernate.dialect.MySQL5InnoDBDialect",
        "spring.jpa.hibernate.ddl-auto" : "update"
      }'
    volumes:
      - .m2:/root/.m2
    stdin_open: true
    tty: true
volumes:
  db:

My .env:

MYSQLDB_USER=root
MYSQLDB_ROOT_PASSWORD=123456
MYSQLDB_DATABASE=investor
MYSQLDB_LOCAL_PORT=3307
MYSQLDB_DOCKER_PORT=3306
SPRING_LOCAL_PORT=6868
SPRING_DOCKER_PORT=8080

My Dockerfile:

FROM maven:3.8.6-openjdk-18
WORKDIR /investor-app
COPY . .
RUN mvn clean install
CMD mvn spring-boot:run

My pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ensei</groupId>
    <artifactId>InvestmentCalculator</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>InvestmentCalculator</name>
    <description>Tool for calculation of benefits from investment projects</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.15.3</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

My Controller.class:

package com.ensei.InvestmentCalculator.controller;

import com.ensei.InvestmentCalculator.model.InvestmentManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;

@Controller
@RequestMapping("investor")
public class MyController {

    @Autowired
    private InvestmentManager manager;

    @GetMapping
    public String menu(){
        return "menu";
    }

    @GetMapping("/add")
    public String add(Model model){
        return "add";
    }

    @PostMapping ("/add/{name}")
    public String addDone(Model model, @RequestParam String name, String initialInvestment,
                          String annuity, String differentCashFlow, String period,
                          String customDiscountRate) throws IOException {
        try {
            manager.addInvestmentProject(name, initialInvestment, annuity, differentCashFlow, period, customDiscountRate);
        } catch (Exception e) {
            return "exceptions/incorrectData";
        }
        model.addAttribute("name",name);
        return "addDone";
    }

    @GetMapping("/read")
    public String read(Model model){
        model.addAttribute("projects",manager.readInvestmentProjects());
        return "read";
    }

    @GetMapping("/update")
    public String update(Model model){
        return "update";
    }

    @PostMapping ("/update/{name}")
    public String updateDone(Model model, @RequestParam String name, String initialInvestment,
                          String annuity, String differentCashFlow, String period,
                          String customDiscountRate) throws IOException {
        try {
             manager.updateInvestmentProject(name,initialInvestment,annuity,differentCashFlow,period,customDiscountRate);
        } catch (Exception e){
            return "exceptions/incorrectData";
        }
       model.addAttribute("name",name);
        return "updateDone";
    }

    @GetMapping("/delete")
    public String delete(){
        return "delete";
    }

    @PostMapping ("/delete/{name}")
    public String deleteDone(Model model, @RequestParam String name){
        try {
            manager.deleteInvestmentProject(name);
        } catch (Exception e){
            return "exceptions/incorrectProject";
        }
        model.addAttribute("name",name);
        return "deleteDone";
    }

    @PostMapping(value = {"/add","/update"})
    public String absentName(){
        return "exceptions/absentName";
    }
}

My application.properties file is empty.

0 Answers
Related