Skip to content

A sample application for using database services on Cloud Foundry with Spring Framework.

License

Notifications You must be signed in to change notification settings

nwoike/spring-music

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

89 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Spring Music

This is a sample application for using database services on Cloud Foundry with the Spring Framework and Spring Boot.

This application has been built to store the same domain objects in a relation database - both embedded and non-embedded. This is not meant to represent a realistic use case for these technologies.

The application use Spring Java configuration and bean profiles to configure the application and the connection objects needed to use the persistence stores. It also uses the Spring Cloud Connectors library to inspect the environment when running on Cloud Foundry. See the Cloud Foundry documentation for details on configuring a Spring application for Cloud Foundry.

Running the application locally

The application can be started locally using the following command:

$ ./mvn clean install
$ java -jar -Dspring.profiles.active=<profile> target/spring-music-1.0.0-SNAPSHOT.jar

where <profile> is one of the following values:

  • default (no external database required)
  • cloud (postgresql datasource)

If no profile is provided, in-memory will be used. If any other profile is provided, the appropriate database server must be started separately. The application will use the host name localhost and the default port to connect to the database. The connection parameters can be configured by setting the appropriate Spring Boot properties.

If more than one of these profiles is provided, the application will throw an exception and fail to start.

Running the application on Cloud Foundry

When running on Cloud Foundry, the application will detect the type of database service bound to the application (if any). If a service of one of the supported types (MySQL, Postgres, Oracle, MongoDB, or Redis) is bound to the app, the appropriate Spring profile will be configured to use the database service. The connection strings and credentials needed to use the service will be extracted from the Cloud Foundry environment.

If no bound services are found containing any of these values in the name, then the in-memory profile will be used.

If more than one service containing any of these values is bound to the application, the application will throw an exception and fail to start.

After installing the 'cf' command-line interface for Cloud Foundry, targeting a Cloud Foundry instance, and logging in, the application can be built and pushed using these commands:

$ ./mvn clean install
$ cf push

The application will be pushed using settings in the provided manifest.yml file. The output from the command will show the URL that has been assigned to the application.

Creating and binding services

Using the provided manifest, the application will be created with a cloud provided database. You can create and bind database services to the application using the information below.

System-managed services

Depending on the Cloud Foundry service provider, persistence services might be offered and managed by the platform. These steps can be used to create and bind a service that is managed by the platform:

# view the services available
$ cf marketplace
# create a service instance
$ cf create-service <service> <service plan> <service name>
# bind the service instance to the application
$ cf bind-service <app name> <service name>
# restart the application so the new service is detected
$ cf restart

User-provided services

Cloud Foundry also allows service connection information and credentials to be provided by a user. In order for the application to detect and connect to a user-provided service, a single uri field should be given in the credentials using the form <dbtype>://<username>:<password>@<hostname>:<port>/<databasename>.

These steps use examples for username, password, host name, and database name that should be replaced with real values.

# create a user-provided Oracle database service instance
$ cf create-user-provided-service oracle-db -p '{"uri":"oracle://root:[email protected]:1521/mydatabase"}'
# create a user-provided MySQL database service instance
$ cf create-user-provided-service mysql-db -p '{"uri":"mysql://root:[email protected]:3306/mydatabase"}'
# bind a service instance to the application
$ cf bind-service <app name> <service name>
# restart the application so the new service is detected
$ cf restart

Changing bound services

To test the application with different services, you can simply stop the app, unbind a service, bind a different database service, and start the app:

$ cf unbind-service <app name> <service name>
$ cf bind-service <app name> <service name>
$ cf restart

About

A sample application for using database services on Cloud Foundry with Spring Framework.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 32.6%
  • HTML 31.6%
  • JavaScript 25.2%
  • CSS 10.6%