{"id":18853697,"url":"https://github.com/rwynn/wellington","last_synced_at":"2025-08-03T00:08:33.013Z","repository":{"id":14445946,"uuid":"17157518","full_name":"rwynn/wellington","owner":"rwynn","description":"This project is meant to provide a base for Spring Boot development.  The idea is to be able to git clone this project and get right down to implementing features.","archived":false,"fork":false,"pushed_at":"2016-10-09T03:06:04.000Z","size":2212,"stargazers_count":13,"open_issues_count":0,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-27T23:41:46.810Z","etag":null,"topics":["angularjs","docker","gradle","spring","spring-boot","vagrant"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"kbeckman/omniauth-wsfed","license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rwynn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-02-25T01:41:00.000Z","updated_at":"2024-10-30T07:08:19.000Z","dependencies_parsed_at":"2022-09-10T23:56:53.383Z","dependency_job_id":null,"html_url":"https://github.com/rwynn/wellington","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwynn%2Fwellington","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwynn%2Fwellington/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwynn%2Fwellington/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwynn%2Fwellington/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rwynn","download_url":"https://codeload.github.com/rwynn/wellington/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248860682,"owners_count":21173483,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angularjs","docker","gradle","spring","spring-boot","vagrant"],"created_at":"2024-11-08T03:45:19.442Z","updated_at":"2025-04-14T10:23:57.826Z","avatar_url":"https://github.com/rwynn.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"Wellington\n===============\nThis project is meant to provide a base for Spring Boot development.  The idea is to be able to\ngit clone this project and get right down to implementing features.\n\n[![Build Status](https://travis-ci.org/rwynn/wellington.svg?branch=master)](https://travis-ci.org/rwynn/wellington)\n\n### A look inside ###\n\n- Vagrant integration\n    - vagrant up from the root folder\n    - provisioning step will install the app and run it in the background\n\n- Docker integration\n    - Automating the packaging and deployment of applications\n    - Automated testing and continuous integration/deployment\n\n- AngularJS Starter\n    - Based on Angular seed\n    - Basic Admin UI provided that leverages spring boot management endpoints\n\n- Thymeleaf Server side templates\n    - Seamless integration with Spring security\n\n- Webjars integration\n    - Helps manage versions of Angular, Jquery, and Bootstap via gradle\n\n- Built with Gradle\n    - gradle wrapper for auto installation\n    - dependency management\n    - automated tests\n        - ./gradlew test\n            - executes unit tests\n            - generates code coverage report\n            - checks code style\n            - checks code quality\n    - automated code coverage\n        - ./gradlew jacocoTestReport\n    - [flyway](http://flywaydb.org/) database migrations\n        - ./gradlew flywayMigrate\n        - Incremental database design\n    - [protractor](https://github.com/angular/protractor) functional tests\n        - ./gradlew npm (installs node dependencies)\n        - ./gradlew protractorRun (runs functional tests)\n            - tests defined in src/test/javascript/e2e/scenarios.js\n            - leverages protractor support for AngularJS\n    - javascript best practices built in\n        - [jshint](http://jshint.com/)\n        - combination\n        - minification\n        - source map\n        - [karma](http://karma-runner.github.io/) javascript unit testing\n            - ./gradlew karmaRun\n    - auto builds git.properties and packages it in your application\n        - contains the working branch and commit id\n        - spring actuator makes this information available at the /info endpoint\n\n- Java Based Spring Configuration via annotations\n\n- Spring Hibernate JPA\n    - CrudRepository\n    - Hibernate Events\n    - Transaction Management\n    - Entity Versioning\n    - Entity Auditing\n\n- JOOQ type safe query generation\n    - gradle task to generate DSL classes from the database\n        - ./gradlew jooqGen\n    - used in conjunction with spring jdbc template to leverage spring transaction support\n    - helper classes to support pagination of results\n\n- Configured to use the Tomcat JDBC Connection Pool\n    - well maintained, small connection pool implementation\n    - multi threaded\n\n- DAO based Spring security\n    - REST endpoints authorized via authorities\n    - Spring Service interfaces authorized via authorities\n    - Password hashing using [jBCrypt](http://www.mindrot.org/projects/jBCrypt/)\n        - Java implementation of OpenBSD's Blowfish\n        - Designed to raise the cost of off-line password cracking and\n          frustrate fast hardware implementation\n\n- JSR 303 Validation\n    - Validation groups\n    - Validation at the Controller level\n    - Validation at the Entity level\n    - Validation of External Configuration\n    - Strong password validator via [vt-password](http://code.google.com/p/vt-middleware/wiki/vtpassword)\n\n- JMS Messaging via ActiveMQ\n    - JMSTemplate\n    - MessageListenerContainer\n\n- REST Controller\n    - Base REST Error Handler\n        - Business Exception\n        - Data Integity Exception\n        - Validation Exception\n        - Malformed Input Exception\n    - Straightforward JPA data paging / REST page response\n    - JSON payloads\n\n- Ehcache integration\n    - Annotation based caching and cache eviction\n    - Caching of User authentication info\n\n- Spring AOP\n    - Aspect Oriented programming via Annotations\n\n- YAML configuration files\n\n- Object mapping via Dozer\n\n- Logging via Logback\n\n- Automatic management endpoints via Spring Actuator\n    - /health\n    - /metrics\n    - /trace\n    - /dump\n    - /beans\n    - [More Endpoints](https://github.com/spring-projects/spring-boot/tree/master/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint)\n    - Endpoints secured with Spring Security\n\n### Running the application with vagrant ###\n\nPrerequisites\n\n- [Vagrant](https://www.vagrantup.com/)\n\nInstall the app and run in the background (takes a while the first time)\n\n    vagrant up\n\nThe app will be provisioned, installed as an upstart service, and started in the background\n\nIt may take a minute or two before you are able to reach http://localhost:8080\n\nSubsequent runs of vagrant up will start Wellington via upstart\n\n### Running the application with docker ###\n\nPrerequisites\n\n- [Docker](https://www.docker.io/)\n\nNote: this assumes your docker binary is **docker.io**\n\nBuild the docker image (rerun this after making any changes to your app)\n\n    sudo docker.io build -t spring .\n\nRun the docker image with port mapping\n\n    sudo docker.io run -p 80:80 -i -t spring\n\nIf everything goes well you should eventually see a message like the following in your console:\n\n    Started Application in 14.034 seconds (JVM running for 14.538)\n\nYou should now be able to access the application on your host system by visiting http://localhost\n\nIf you would like to save the container you created as a tar file and reuse it:\n\n    sudo docker.io ps -a\n    // note the container id for the tag spring:latest\n    sudo docker.io export 8bf522a7ee22 \u003e spring.tar\n    // where 8bf522a7ee22 is the container id noted in the previous command\n\nYou can then restore the result tar into docker using the following command\n\n    cat spring.tar | sudo docker.io import - spring:new\n\nIf you would like to remove all Docker related assets you can use the following commands:\n\n    sudo docker.io rm `sudo docker.io ps -a -q`\n    sudo docker.io rmi `sudo docker.io images -q`\n\n#### Running the application without docker ####\n\nPrerequisites\n\n- [Java 7](http://www.oracle.com/technetwork/java/javase/overview/index.html)\n- [Apache ActiveMQ](http://activemq.apache.org/)\n- [Postgresql](http://www.postgresql.org/) Database (empty database named 'spring')\n- [nodejs] (http://nodejs.org/)\n\nStart ActiveMQ (from activeMQ HOME)\n\n    bin/activemq start\n\nCreate database tables via flyway (from project dir)\n\n    ./gradlew flywayMigrate\n\nBuild the application\n\n    ./gradlew build\n\nRun the Web App on port 8080 (from project dir)\n\n    ./gradlew bootRun\n\n#### Verify the Application ####\n\nBy default the system will have 1 admin user with credentials (admin/admin).\n\nYou can login at http://localhost:8080 or simply http://localhost if using Docker.\n\nYou can register new users by clicking the Register link before login.\n\n#### Running the functional tests ####\n\nBy default the chrome web browser is used.  Update protractor-conf.js to change this.\n\nInstall node dependencies (do once and then anytime package.json is updated)\n\n    ./gradlew npm\n\nStart the app if not already started\n\n    ./gradlew bootRun\n\nRun protractor (update baseUrl in protractor-conf.js to http://localhost if running with Docker)\n\n    ./gradlew protractorRun\n\nCheck output\n\n    build/test-results/TEST-Wellington.xml\n\n\n#### Setting up an IDE for development ####\n\nEclipse\n\n    ./gradlew eclipse\n\nIntelliJ IDEA\n\n    ./gradlew idea\n\n#### Running inside a servlet 3 web container ####\n\nAdd the war plugin to build.gradle\n\n    apply plugin 'war'\n\nChange the build target from jar to war in build.gradle\n\n    jar {\n        baseName = 'wellington'\n        version =  '0.1.0'\n    }\n\n    becomes\n\n    war {\n        baseName = 'wellington'\n        version =  '0.1.0'\n    }\n\nYou can now build a war file to deploy to your container\n\n    ./gradlew clean war\n\nIf you are using Spring Tool Suite or Eclipse, you need to run\n\n    ./gradlew eclipseWtp\n\nto reconfigure your project so you can drag the app directly to tc Server.\n\n#### Unit Testing the Angular app ####\n\nTo start Karma in watch mode simply run the following:\n\n    ./gradlew karmaRun\n\nYou can simply edit your javascript files and the tests will be re-run on modification\n\n#### Development Mode ####\n\nFlip a switch in application.properties in order to run in development mode\n\n    info.app.development=true\n\nThis change switches from using the minified version of the app javascript to the un-minified\n\nThis change also switches to serving static assets from the project source\ndirectory instead of from the packaged jar file so that you may reload\nthe browser to see your changes immediately\n\nYou may also want to turn off the thymeleaf cache in application.properties during development\n\n    spring.thymeleaf.cache=false\n\nAnd also turn off the static resource cache\n\n    spring.resources.cachePeriod=0\n\n#### More customization options ####\n\nSee [Spring Boot Reference Guide](http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/)\n\n#### Notes on the Docker support ####\n\nThe docker config by default sets up Postgresql, ActiveMQ, and Varnish to support your application.  When moving\nto a production deployment you can leverage\n[AWS Elastic Beanstalk for Docker](http://aws.typepad.com/aws/2014/04/aws-elastic-beanstalk-for-docker.html),\nwith minimal changes to your application.\n\nThe documentation on how to do this should be pretty straigtforward.  You basically upload a zip file containing\nyour entire project.  Since it contains a Dockerfile, AWS EB will detect this and setup your application, with\nall the additional benefits of AWS EB such as provisioning, monitoring, scaling, and load balancing.\n\nOne change that you will probably want to make is to use a database external to your Docker image.  You can\nuse Amazon RDS, for example, to create a Postgresql database.  The only change you would need to make is to update\n**application.properties** and **jooq-config.xml** with the connection settings for your RDS database before\nuploading your .zip file.\n\nOptionally, you can also remove the steps in Dockerfile and the config/docker directory that deal with\nsetting up Postgresql (since it will be managed separately).\n\n#### License ####\nWellington is released under version 2.0 of the [Apache License](http://www.apache.org/licenses/LICENSE-2.0).\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frwynn%2Fwellington","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frwynn%2Fwellington","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frwynn%2Fwellington/lists"}