diff --git a/README.md b/README.md
index ef843e1..8378a63 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,7 @@ Spring Boot使用的各种示例,以最简单、最实用为标准
- [spring-boot-hello](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-hello):Spring Boot 2.0 Hello World 示例
- [spring-boot-banner](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-banner):Spring Boot 定制 Banner 示例
- [spring-boot-docker](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-banner):使用 Docker 部署 Spring Boot 示例
-
+- [dockercompose-springboot-mysql-nginx](https://github.com/ityouknow/spring-boot-examples/tree/master/dockercompose-springboot-mysql-nginx) :Docker Compose + Spring Boot + Nginx + Mysql 示例
**参考文章**
diff --git a/README_EN.md b/README_EN.md
index 263cbbf..110abeb 100644
--- a/README_EN.md
+++ b/README_EN.md
@@ -15,6 +15,8 @@ Spring Boot Examples, Use the simplest and most useful scene demo.
- [spring-boot-hello](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-hello):Spring Boot 2.0 Hello World Demo
- [spring-boot-banner](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-banner):Spring Boot Customized Banner
- [spring-boot-docker](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-banner):Spring Boot with Docker
+- [dockercompose-springboot-mysql-nginx](https://github.com/ityouknow/spring-boot-examples/tree/master/dockercompose-springboot-mysql-nginx) :Docker Compose + Spring Boot + Nginx + Mysql example
+
---
diff --git a/dockercompose-springboot-mysql-nginx/app/Dockerfile b/dockercompose-springboot-mysql-nginx/app/Dockerfile
new file mode 100644
index 0000000..6ae65e4
--- /dev/null
+++ b/dockercompose-springboot-mysql-nginx/app/Dockerfile
@@ -0,0 +1 @@
+FROM maven:3.5-jdk-8
\ No newline at end of file
diff --git a/dockercompose-springboot-mysql-nginx/app/pom.xml b/dockercompose-springboot-mysql-nginx/app/pom.xml
new file mode 100644
index 0000000..1dc59f6
--- /dev/null
+++ b/dockercompose-springboot-mysql-nginx/app/pom.xml
@@ -0,0 +1,56 @@
+
+
+ 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
+ 2.0.0.RELEASE
+
+
+
+ UTF-8
+ 1.8
+
+
+
+
+ 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
+ test
+
+
+
+
+ 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..583be10
--- /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 javax.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..43cfa34
--- /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 javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.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..25126f0
--- /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.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..eacae62
--- /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.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..242edfd
--- /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.MySQL5InnoDBDialect
+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..028978f
--- /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:
+ - 80:80
+ - 443:443
+ 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:
+ - "3306:3306"
+ 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;
+ }
+}