Commit efad9c19 authored by Adib Saikali's avatar Adib Saikali

Upgrade dependencies and improve the health check

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
parent 53be8439
......@@ -18,3 +18,4 @@ target/
build/
*.log*
/classes/
buildscript {
ext {
springBootVersion = '1.3.7.RELEASE'
springCloudConnectorsVersion = '1.2.3.RELEASE'
springBootVersion = '1.5.4.RELEASE'
springCloudConnectorsVersion = '1.2.4.RELEASE'
}
repositories {
......@@ -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()
......@@ -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}"
......@@ -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"
......@@ -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'
}
}
\ No newline at end of file
#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
#!/usr/bin/env bash
#!/usr/bin/env sh
##############################################################################
##
......@@ -6,20 +6,38 @@
##
##############################################################################
# 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
......@@ -30,6 +48,7 @@ die ( ) {
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
......@@ -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.
......@@ -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
......@@ -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" "$@"
......@@ -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
......@@ -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.
......@@ -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
......
......@@ -3,7 +3,7 @@ package org.cloudfoundry.samples.music;
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 {
......
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;
}
}
......@@ -7,19 +7,13 @@ import org.springframework.context.annotation.Profile;
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");
}
}
......@@ -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
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment