From 49ffb0d61bea3af90eb42cd47d8f6410e2e93c82 Mon Sep 17 00:00:00 2001 From: ityouknow Date: Wed, 28 Dec 2022 17:50:01 +0800 Subject: [PATCH] add dockercompose-springboot-mysql-nginx --- README.md | 1 + .../app/Dockerfile | 1 + .../app/pom.xml | 67 +++++++++++++++++++ .../main/java/com/neo/ComposeApplication.java | 12 ++++ .../com/neo/controller/VisitorController.java | 31 +++++++++ .../src/main/java/com/neo/entity/Visitor.java | 41 ++++++++++++ .../com/neo/repository/VisitorRepository.java | 8 +++ .../main/resources/application-dev.properties | 4 ++ .../resources/application-docker.properties | 4 ++ .../src/main/resources/application.properties | 5 ++ .../java/com/neo/ComposeApplicationTests.java | 18 +++++ .../docker-compose.yaml | 36 ++++++++++ .../nginx/conf.d/app.conf | 20 ++++++ 13 files changed, 248 insertions(+) create mode 100644 dockercompose-springboot-mysql-nginx/app/Dockerfile create mode 100644 dockercompose-springboot-mysql-nginx/app/pom.xml create mode 100644 dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/ComposeApplication.java create mode 100644 dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/controller/VisitorController.java create mode 100644 dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/entity/Visitor.java create mode 100644 dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/repository/VisitorRepository.java create mode 100644 dockercompose-springboot-mysql-nginx/app/src/main/resources/application-dev.properties create mode 100644 dockercompose-springboot-mysql-nginx/app/src/main/resources/application-docker.properties create mode 100644 dockercompose-springboot-mysql-nginx/app/src/main/resources/application.properties create mode 100644 dockercompose-springboot-mysql-nginx/app/src/test/java/com/neo/ComposeApplicationTests.java create mode 100644 dockercompose-springboot-mysql-nginx/docker-compose.yaml create mode 100644 dockercompose-springboot-mysql-nginx/nginx/conf.d/app.conf diff --git a/README.md b/README.md index 9e0a5fa..f4d6682 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ Spring Boot 使用的各种示例,以最简单、最实用为标准,此开 - [spring-boot-file-upload](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-file-upload):Spring Boot 3.0 上传文件使用案例 - [spring-boot-commandLineRunner](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-commandLineRunner):Spring Boot 3.0 目启动时初始化资源案例 - [spring-boot-docker](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-docker):Spring Boot 3.0 Docker 使用案例 +- [dockercompose-springboot-mysql-nginx](https://github.com/ityouknow/spring-boot-examples/tree/master/dockercompose-springboot-mysql-nginx):Spring Boot 3.0 Docker Compose + Spring Boot + Nginx + Mysql 使用案例 - [spring-boot-memcache-spymemcached](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-memcache-spymemcached):Spring Boot 3.0 集成 Memcached 使用案例 diff --git a/dockercompose-springboot-mysql-nginx/app/Dockerfile b/dockercompose-springboot-mysql-nginx/app/Dockerfile new file mode 100644 index 0000000..128ca1d --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/Dockerfile @@ -0,0 +1 @@ +FROM maven:3.8.3-openjdk-17 diff --git a/dockercompose-springboot-mysql-nginx/app/pom.xml b/dockercompose-springboot-mysql-nginx/app/pom.xml new file mode 100644 index 0000000..4a8f04b --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + com.neo + dockercompose-springboot-mysql-nginx + 1.0 + jar + + dockercompose-springboot-mysql-nginx + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 3.0.0 + + + + UTF-8 + UTF-8 + 17 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-jpa + + + mysql + mysql-connector-java + + + org.springframework.boot + spring-boot-starter-test + + + org.junit.vintage + junit-vintage-engine + test + + + org.hamcrest + hamcrest-core + + + + + + + compile + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/ComposeApplication.java b/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/ComposeApplication.java new file mode 100644 index 0000000..9c2646d --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/ComposeApplication.java @@ -0,0 +1,12 @@ +package com.neo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ComposeApplication { + + public static void main(String[] args) { + SpringApplication.run(ComposeApplication.class, args); + } +} diff --git a/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/controller/VisitorController.java b/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/controller/VisitorController.java new file mode 100644 index 0000000..a73a030 --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/controller/VisitorController.java @@ -0,0 +1,31 @@ +package com.neo.controller; + +import com.neo.entity.Visitor; +import com.neo.repository.VisitorRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import jakarta.servlet.http.HttpServletRequest; + +@RestController +public class VisitorController { + + @Autowired + private VisitorRepository repository; + + @RequestMapping("/") + public String index(HttpServletRequest request) { + String ip=request.getRemoteAddr(); + Visitor visitor=repository.findByIp(ip); + if(visitor==null){ + visitor=new Visitor(); + visitor.setIp(ip); + visitor.setTimes(1); + }else { + visitor.setTimes(visitor.getTimes()+1); + } + repository.save(visitor); + return "I have been seen ip "+visitor.getIp()+" "+visitor.getTimes()+" times."; + } +} \ No newline at end of file diff --git a/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/entity/Visitor.java b/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/entity/Visitor.java new file mode 100644 index 0000000..8db97fe --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/entity/Visitor.java @@ -0,0 +1,41 @@ +package com.neo.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; + +@Entity +public class Visitor { + @Id + @GeneratedValue + private long id; + @Column(nullable = false) + private long times; + @Column(nullable = false) + private String ip; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public long getTimes() { + return times; + } + + public void setTimes(long times) { + this.times = times; + } + + public String getIp() { + return ip; + } + + public void setIp(String ip) { + this.ip = ip; + } +} diff --git a/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/repository/VisitorRepository.java b/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/repository/VisitorRepository.java new file mode 100644 index 0000000..7395c39 --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/repository/VisitorRepository.java @@ -0,0 +1,8 @@ +package com.neo.repository; + +import com.neo.entity.Visitor; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface VisitorRepository extends JpaRepository { + Visitor findByIp(String ip); +} diff --git a/dockercompose-springboot-mysql-nginx/app/src/main/resources/application-dev.properties b/dockercompose-springboot-mysql-nginx/app/src/main/resources/application-dev.properties new file mode 100644 index 0000000..0d8ae36 --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/src/main/resources/application-dev.properties @@ -0,0 +1,4 @@ +spring.datasource.url=jdbc:mysql://localhost:3306/test +spring.datasource.username=root +spring.datasource.password=root +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver \ No newline at end of file diff --git a/dockercompose-springboot-mysql-nginx/app/src/main/resources/application-docker.properties b/dockercompose-springboot-mysql-nginx/app/src/main/resources/application-docker.properties new file mode 100644 index 0000000..60acaa9 --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/src/main/resources/application-docker.properties @@ -0,0 +1,4 @@ +spring.datasource.url=jdbc:mysql://mysql:3306/test +spring.datasource.username=root +spring.datasource.password=root +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver \ No newline at end of file diff --git a/dockercompose-springboot-mysql-nginx/app/src/main/resources/application.properties b/dockercompose-springboot-mysql-nginx/app/src/main/resources/application.properties new file mode 100644 index 0000000..c6c9931 --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/src/main/resources/application.properties @@ -0,0 +1,5 @@ +spring.jpa.properties.hibernate.hbm2ddl.auto=update +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect +spring.jpa.show-sql=true + +spring.profiles.active=dev \ No newline at end of file diff --git a/dockercompose-springboot-mysql-nginx/app/src/test/java/com/neo/ComposeApplicationTests.java b/dockercompose-springboot-mysql-nginx/app/src/test/java/com/neo/ComposeApplicationTests.java new file mode 100644 index 0000000..b0f9edf --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/src/test/java/com/neo/ComposeApplicationTests.java @@ -0,0 +1,18 @@ +package com.neo; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class ComposeApplicationTests { + + @Test + public void contextLoads() { + System.out.println("Hello Spring Boot Docker Compose!"); + } + +} diff --git a/dockercompose-springboot-mysql-nginx/docker-compose.yaml b/dockercompose-springboot-mysql-nginx/docker-compose.yaml new file mode 100644 index 0000000..ba38d57 --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/docker-compose.yaml @@ -0,0 +1,36 @@ +version: '3' +services: + nginx: + container_name: v-nginx + image: nginx:1.13 + restart: always + ports: + - 81:81 + - 445:445 + volumes: + - ./nginx/conf.d:/etc/nginx/conf.d + + mysql: + container_name: v-mysql + image: mysql/mysql-server:5.7 + environment: + MYSQL_DATABASE: test + MYSQL_ROOT_PASSWORD: root + MYSQL_ROOT_HOST: '%' + ports: + - "3308:3308" + restart: always + + app: + restart: always + build: ./app + working_dir: /app + volumes: + - ./app:/app + - ~/.m2:/root/.m2 + expose: + - "8080" + depends_on: + - nginx + - mysql + command: mvn clean spring-boot:run -Dspring-boot.run.profiles=docker \ No newline at end of file diff --git a/dockercompose-springboot-mysql-nginx/nginx/conf.d/app.conf b/dockercompose-springboot-mysql-nginx/nginx/conf.d/app.conf new file mode 100644 index 0000000..4860514 --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/nginx/conf.d/app.conf @@ -0,0 +1,20 @@ +server { + listen 80; + charset utf-8; + access_log off; + + location / { + proxy_pass http://app:8080; + proxy_set_header Host $host:$server_port; + proxy_set_header X-Forwarded-Host $server_name; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + location /static { + access_log off; + expires 30d; + + alias /app/static; + } +}