Skip to content

Commit

Permalink
Upgrade dependencies and improve the health check
Browse files Browse the repository at this point in the history
Upgrade SpringBoot to 1.5.4
Upgrade Spring Cloud Connectors to 1.2.4
Upgrade Java to 1.8
Upgrade gradle to version 3.5

Polish the gradle build file

Create a a custom health aggregator that only reports on the health of
the database being used. For example if Redis is used it does not
report on the health of th SQL database and Redis, if a SQL db is used
it does not report on the heath of mongodb and redis
  • Loading branch information
asaikali committed Jun 19, 2017
1 parent 53be843 commit efad9c1
Show file tree
Hide file tree
Showing 10 changed files with 118 additions and 66 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@ target/
build/

*.log*
/classes/
25 changes: 9 additions & 16 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
buildscript {
ext {
springBootVersion = '1.3.7.RELEASE'
springCloudConnectorsVersion = '1.2.3.RELEASE'
springBootVersion = '1.5.4.RELEASE'
springCloudConnectorsVersion = '1.2.4.RELEASE'
}

repositories {
Expand All @@ -20,12 +20,12 @@ apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'idea'

apply plugin: 'spring-boot'
apply plugin: 'org.springframework.boot'

version = '1.0'

sourceCompatibility = 1.7
targetCompatibility = 1.7
sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
mavenCentral()
Expand All @@ -37,7 +37,7 @@ dependencies {
compile "org.springframework.boot:spring-boot-starter-actuator"
compile "org.springframework.boot:spring-boot-starter-data-jpa"
compile "org.springframework.boot:spring-boot-starter-data-mongodb"
compile "org.springframework.boot:spring-boot-starter-redis"
compile "org.springframework.boot:spring-boot-starter-data-redis"

// Spring Cloud Connectors
compile "org.springframework.cloud:spring-cloud-core:${springCloudConnectorsVersion}"
Expand All @@ -48,11 +48,8 @@ dependencies {
compile "commons-dbcp:commons-dbcp"
runtime "com.h2database:h2"
runtime "mysql:mysql-connector-java"
runtime "postgresql:postgresql:9.1-901-1.jdbc4"
runtime "com.microsoft.sqlserver:mssql-jdbc:6.1.0.jre8"

// Redis Persistence
compile "redis.clients:jedis"
runtime "org.postgresql:postgresql"
runtime "com.microsoft.sqlserver:mssql-jdbc"

// Webjars
compile "org.webjars:bootstrap:3.1.1"
Expand All @@ -68,8 +65,4 @@ dependencies {
jar {
baseName = "spring-music"
version = "" // omit the version from the war file name
}

task wrapper(type: Wrapper) {
gradleVersion = '2.14'
}
}
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Fri Jul 01 14:31:42 EDT 2016
#Sun Jun 18 20:18:18 EDT 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-bin.zip
72 changes: 42 additions & 30 deletions gradlew
Original file line number Diff line number Diff line change
@@ -1,25 +1,43 @@
#!/usr/bin/env bash
#!/usr/bin/env sh

##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null

APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"

warn ( ) {
warn () {
echo "$*"
}

die ( ) {
die () {
echo
echo "$*"
echo
Expand All @@ -30,6 +48,7 @@ die ( ) {
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
Expand All @@ -40,26 +59,11 @@ case "`uname`" in
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac

# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar

# Determine the Java command to use to start the JVM.
Expand All @@ -85,7 +89,7 @@ location of your Java installation."
fi

# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
Expand Down Expand Up @@ -150,11 +154,19 @@ if $cygwin ; then
esac
fi

# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
APP_ARGS=$(save "$@")

# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"

# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi

exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
exec "$JAVACMD" "$@"
14 changes: 4 additions & 10 deletions gradlew.bat
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

Expand Down Expand Up @@ -46,10 +46,9 @@ echo location of your Java installation.
goto fail

:init
@rem Get command-line arguments, handling Windowz variants
@rem Get command-line arguments, handling Windows variants

if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args

:win9xME_args
@rem Slurp the command line arguments.
Expand All @@ -60,11 +59,6 @@ set _SKIP=2
if "x%~1" == "x" goto execute

set CMD_LINE_ARGS=%*
goto execute

:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$

:execute
@rem Setup the command line
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import org.cloudfoundry.samples.music.config.SpringApplicationContextInitializer;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package org.cloudfoundry.samples.music;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthAggregator;
import org.springframework.boot.actuate.health.OrderedHealthAggregator;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import static java.util.stream.Collectors.toMap;


/**
* Health Aggregator class that only considers the persistence provider that is used.
* For example if H2 is used then it will not aggregate the health of redis and
* mongodb.
*/
@Component
public class SpringMusicHealthAggregator implements HealthAggregator {

private final List<String> excluded = new ArrayList<>();
private final OrderedHealthAggregator orderedHealthAggregator = new OrderedHealthAggregator();

@Autowired
public SpringMusicHealthAggregator(Environment environment) {

if(environment.acceptsProfiles("redis")){
excluded.add("mongo");
excluded.add("db");
} else if( environment.acceptsProfiles("mongodb")) {
excluded.add("redis");
excluded.add("db");
} else {
excluded.add("mongo");
excluded.add("redis");
}
}

@Override
public Health aggregate(Map<String, Health> healths){

Map<String,Health> filtered = healths.entrySet().stream().filter( entry -> !excluded.contains(entry.getKey())).
collect(toMap(entry -> entry.getKey(), entry -> entry.getValue()));

Health filteredHealth = orderedHealthAggregator.aggregate(filtered);
return filteredHealth;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,13 @@
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;

import java.net.UnknownHostException;

@Configuration
@Profile("mongodb-local")
public class MongoLocalConfig {

@Bean
public MongoDbFactory mongoDbFactory() {
try {
return new SimpleMongoDbFactory(new MongoClient(), "music");
} catch (UnknownHostException e) {
throw new RuntimeException("Error creating MongoDbFactory: " + e);
}
return new SimpleMongoDbFactory(new MongoClient(), "music");
}

}
5 changes: 5 additions & 0 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,8 @@
spring:
jpa:
generate-ddl: true

# turn off the security on the actuator end points as this is a demo app
management:
security:
enabled: false

0 comments on commit efad9c1

Please sign in to comment.