Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 75 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

<groupId>guru.springframework</groupId>
<artifactId>spring-boot-docker</artifactId>
<version>0.0.1-SNAPSHOT</version>
<version>0.0.3-SNAPSHOT</version>
<packaging>jar</packaging>

<name>spring-boot-docker</name>
Expand All @@ -21,9 +21,21 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>

<!--set this to your docker acct name-->
<docker.image.prefix>springframeworkguru</docker.image.prefix>

<!--Set to name of project-->
<docker.image.name>springbootdocker</docker.image.name>

</properties>

<dependencies>
<dependency>
<groupId>guru.springframework</groupId>
<artifactId>page-view-client</artifactId>
<version>0.0.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
Expand All @@ -32,7 +44,6 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
Expand All @@ -52,6 +63,68 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.20.0</version>

<configuration>

<!--<dockerHost>http://127.0.0.1:2375</dockerHost>-->
<dockerHost>unix:///var/run/docker.sock</dockerHost>

<verbose>true</verbose>
<images>
<image>
<name>${docker.image.prefix}/${docker.image.name}</name>
<build>
<dockerFileDir>${project.basedir}/target/dockerfile/</dockerFileDir>

<!--copies artficact to docker build dir in target-->
<assembly>
<descriptorRef>artifact</descriptorRef>
</assembly>
<tags>
<tag>latest</tag>
<tag>${project.version}</tag>
</tags>
</build>
<run>
<ports>
<port>8080:8080</port>
</ports>
</run>
</image>
</images>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>execute</goal>
</goals>
</execution>
</executions>
<configuration>
<scripts>
<script>file:///${project.basedir}/src/main/scripts/BuildDockerfile.groovy</script>
</scripts>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<!-- any version of Groovy \>= 1.5.0 should work here -->
<version>2.4.8</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>

Expand Down
6 changes: 6 additions & 0 deletions src/main/docker/DockerfileTemplate
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
FROM openjdk

VOLUME /tmp
ADD maven/${fileName}.jar ${fileName}.jar
RUN sh -c 'touch /${fileName}'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/${fileName}.jar"]
Original file line number Diff line number Diff line change
@@ -1,30 +1,45 @@
package guru.springframework.controllers;

import guru.springframework.model.events.PageViewEvent;
import guru.springframework.pageview.PageViewService;
import guru.springframework.services.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Date;
import java.util.UUID;

/**
* Created by jt on 1/20/16.
*/
@Controller
public class ProductController {

private ProductService productService;
private PageViewService pageViewService;

@Autowired
public ProductController(ProductService productService) {
public ProductController(ProductService productService, PageViewService pageViewService) {
this.productService = productService;
this.pageViewService = pageViewService;
}

@RequestMapping("/product/{id}")
public String getProductById(@PathVariable Integer id, Model model){

model.addAttribute("product", productService.getProduct(id));

//Send Page view event
PageViewEvent pageViewEvent = new PageViewEvent();
pageViewEvent.setPageUrl("springframework.guru/product/" + id);
pageViewEvent.setPageViewDate(new Date());
pageViewEvent.setCorrelationId(UUID.randomUUID().toString());

pageViewService.sendPageViewEvent(pageViewEvent);

return "product";
}
}
1 change: 1 addition & 0 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
spring.rabbitmq.host=
14 changes: 14 additions & 0 deletions src/main/scripts/BuildDockerfile.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
String template = new File("${project.basedir}/src/main/docker/DockerfileTemplate".toString()).getText()

def dockerFileText = new groovy.text.SimpleTemplateEngine().createTemplate(template)
.make([fileName: project.build.finalName])

println "writing dir " + "${project.basedir}/target/dockerfile"
new File("${project.basedir}/target/dockerfile/".toString()).mkdirs()

println "writing file"
File dockerFile = new File("${project.basedir}/target/dockerfile/Dockerfile".toString())

dockerFile.withWriter('UTF-8') { writer ->
writer.write(dockerFileText)
}
19 changes: 19 additions & 0 deletions src/main/scripts/dockercommands.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
## Use to run mysql db docker image
docker run --name mysqldb -p 3306:3306 -e MYSQL_DATABASE=pageviewservice -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql

## Use to run RabbitMQ
docker run --name rabbitmq -p 5671:5671 -p 5672:5672 rabbitmq

## does not work
docker run --name pageviewservice -p 8081:8081 springframeworkguru/pageviewservice

## does not work
docker run --name pageviewservice -p 8081:8081 -e SPRING_DATASOURCE_URL=jdbc:mysql://127.0.0.1:3306/pageviewservice -e SPRING_PROFILES_ACTIVE=mysql springframeworkguru/pageviewservice

docker run --name pageviewservice -p 8081:8081 \
--link rabbitmq:rabbitmq \
--link mysqldb:mysqldb \
-e SPRING_DATASOURCE_URL=jdbc:mysql://mysqldb:3306/pageviewservice \
-e SPRING_PROFILES_ACTIVE=mysql \
-e SPRING_RABBITMQ_HOST=rabbitmq \
springframeworkguru/pageviewservice