diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md new file mode 100644 index 00000000..48d5f81f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/custom.md @@ -0,0 +1,10 @@ +--- +name: Custom issue template +about: Describe this issue template's purpose here. +title: '' +labels: '' +assignees: '' + +--- + + diff --git a/README.md b/README.md index c2bf7c34..3be62202 100644 --- a/README.md +++ b/README.md @@ -1,81 +1,40 @@ -simpleworklist -============== +# simpleworklist -Your Todo List for Getting Things Done - -Software-Stack: Spring-Boot, JPA, Spring MVC, Thymeleaf, Twitter Bootstrap, jQuery, HTML5 - -Status ------- ![Java CI with Maven](https://github.com/Spring-Framework-Java-Apps/simpleworklist/workflows/Java%20CI%20with%20Maven/badge.svg?branch=master) -Getting Things Done -------------------- +Your Todo List for Getting Things Done + +## Getting Things Done GTD® and Getting Things Done® are registered trademarks of the David Allen Company. SimpleWorklist is not affiliated with or endorsed by the David Allen Company. -Developer Reminder ------------------- -* Create serialVersionUID for Classes with "implements Serializable": use the JDK tool “serialver“ - - -Drag and Drop -------------- -* https://jqueryhouse.com/jquery-drag-and-drop-plugins/ -* https://mdbootstrap.com/plugins/jquery/draggable/#introduction -* https://github.com/Shopify/draggable/tree/master/examples/src/content/Droppable/UniqueDropzone -* https://github.com/Shopify/draggable#documentation -* https://jqueryhouse.com/jquery-drag-and-drop-plugins/ -* https://shopify.github.io/draggable/examples/simple-list.html -* https://www.elated.com/drag-and-drop-with-jquery-your-essential-guide/ -* https://medium.com/@okandavut/using-jquery-ui-drag-drop-64a24e75e805 - -Shortcuts ---------- -* https://fontawesome.com/icons?d=gallery&m=free -* https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html -* https://ckeditor.com/docs/ckeditor4/latest/guide/dev_installation.html -* http://impossibl.github.io/pgjdbc-ng/docs/current/user-guide/#drivers -* https://devcenter.heroku.com/articles/getting-started-with-java -* https://devcenter.heroku.com/articles/java-support#specifying-a-java-version - -# java-getting-started - -A barebones Java app, which can easily be deployed to Heroku. - -This application supports the [Getting Started with Java on Heroku](https://devcenter.heroku.com/articles/getting-started-with-java) article - check it out. +## Up and Running +A Java Web App, which can easily be deployed to Heroku. [![Deploy to Heroku](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy) -## Running Locally - -Make sure you have Java and Maven installed. Also, install the [Heroku CLI](https://cli.heroku.com/). - -```sh -$ git clone https://github.com/heroku/java-getting-started.git -$ cd java-getting-started -$ mvn install -$ heroku local:start -``` - -Your app should now be running on [localhost:5000](http://localhost:5000/). - -If you're going to use a database, ensure you have a local `.env` file that reads something like this: - -``` -JDBC_DATABASE_URL=jdbc:postgresql://localhost:5432/java_database_name -``` +## URLs +### Development +* Heroku Deployment: [simpleworklist.herokuapp.com/](https://simpleworklist.herokuapp.com/) +* For Developers: [localhost:5000](http://localhost:5000/) +### Info +* [spring-framework-java-apps.github.io/simpleworklist](http://spring-framework-java-apps.github.io/simpleworklist/) -## Deploying to Heroku +### Github Shortcuts +* [Projects](https://github.com/Spring-Framework-Java-Apps/simpleworklist/projects) +* [Milestones](https://github.com/Spring-Framework-Java-Apps/simpleworklist/milestones) +* [Issues](https://github.com/Spring-Framework-Java-Apps/simpleworklist/issues) +* [Releases](https://github.com/Spring-Framework-Java-Apps/simpleworklist/releases) +* [Branches](https://github.com/Spring-Framework-Java-Apps/simpleworklist/branches) +* [CI](https://github.com/Spring-Framework-Java-Apps/simpleworklist/actions) -```sh -$ heroku create -$ git push heroku master -$ heroku open -``` +## Requirements -## Documentation +### Functional Requirements +[Functional Requirements](etc/requirements/Requirements.md) -For more information about using Java on Heroku, see these Dev Center articles: +### Nonfunctional Requirements +[Nonfunctional Requirements](etc/requirements/Nonfunctional_Requirements.md) -- [Java on Heroku](https://devcenter.heroku.com/categories/java) +## Development +* [Changelog](etc/Changelog.md) diff --git a/etc/CHANGELOG.md b/etc/CHANGELOG.md new file mode 100644 index 00000000..4dc68c6f --- /dev/null +++ b/etc/CHANGELOG.md @@ -0,0 +1,2 @@ +# Changelog + diff --git a/etc/development/Development.md b/etc/development/Development.md new file mode 100644 index 00000000..faaad9f2 --- /dev/null +++ b/etc/development/Development.md @@ -0,0 +1,61 @@ +# Development + +## Developer Reminder +* Create serialVersionUID for Classes with "implements Serializable": use the JDK tool “serialver“ + +## Frontend + +### Drag and Drop +* [jquery-drag-and-drop-plugins](https://jqueryhouse.com/jquery-drag-and-drop-plugins/) +* [jquery draggable](https://mdbootstrap.com/plugins/jquery/draggable/#introduction) +* [shopify draggable: UniqueDropzone](https://github.com/Shopify/draggable/tree/master/examples/src/content/Droppable/UniqueDropzone) +* [shopify draggable: documentation](https://github.com/Shopify/draggable#documentation) +* [shopify draggable: example](https://shopify.github.io/draggable/examples/simple-list.html) +* [drag-and-drop-with-jquery-your-essential-guide](https://www.elated.com/drag-and-drop-with-jquery-your-essential-guide/) +* [using-jquery-ui-drag-drop](https://medium.com/@okandavut/using-jquery-ui-drag-drop-64a24e75e805) + +### Shortcuts +* [fontawesome](https://fontawesome.com/icons?d=gallery&m=free) +* [ckeditor](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_installation.html) + +### Templates +* [thymeleaf](https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html) + +## Backend +* [Alternative PostgreSQL JDBC 4.2* Driver](http://impossibl.github.io/pgjdbc-ng/docs/current/user-guide/#drivers) + +## Heroku +### java +* [heroku: getting-started-with-java](https://devcenter.heroku.com/articles/getting-started-with-java) +* [heroku: java-support java-version](https://devcenter.heroku.com/articles/java-support#specifying-a-java-version) + +### Running Locally +TBD: +Make sure you have Java and Maven installed. Also, install the [Heroku CLI](https://cli.heroku.com/). + +```sh +$ git clone https://github.com/heroku/java-getting-started.git +$ cd java-getting-started +$ mvn install +$ heroku local:start +``` + +Your app should now be running on [localhost:5000](http://localhost:5000/). + +If you're going to use a database, ensure you have a local `.env` file that reads something like this: + +``` +JDBC_DATABASE_URL=jdbc:postgresql://localhost:5432/java_database_name +``` + +#### Deploying to Heroku + +```sh +$ heroku create +$ git push heroku master +$ heroku open +``` + +#### Documentation +For more information about using Java on Heroku, see these Dev Center articles: +* [Java on Heroku](https://devcenter.heroku.com/categories/java) diff --git a/etc/development/HOWTO.md b/etc/development/HOWTO.md new file mode 100644 index 00000000..3c04d669 --- /dev/null +++ b/etc/development/HOWTO.md @@ -0,0 +1,67 @@ + Howto Reminder + +## github +* [Issues](https://github.com/BloodMoneyApp/bloodmoney/issues) +* [Projects](https://github.com/BloodMoneyApp/bloodmoney/projects) +* [Milestones](https://github.com/BloodMoneyApp/bloodmoney/milestones) +* [Releases](https://github.com/BloodMoneyApp/bloodmoney/releases) + +## Development +* [Changelog](etc/RELEASES.md) +* [Todo](etc/TODO.md) +* [Howto](etc/HOWTO.md) + + +## 3rd Party Software +### Howto +* [Spring dependency-management-plugin](https://docs.spring.io/dependency-management-plugin/docs/current/reference/html/) +* [Example on github: heroku and Gradle](https://github.com/heroku/gradle-getting-started/blob/master/build.gradle) +* [Howto: Using lombok](https://projectlombok.org/setup/overview) +* [Howto: Gradle Docker Compose](https://bmuschko.com/blog/gradle-docker-compose/) + +### Documentation +* [spring-boot](https://spring.io/projects/spring-boot) +* [spring-data-jpa](https://spring.io/projects/spring-data-jpa) +* [spring-framework](https://spring.io/projects/spring-framework) +* [spring-framework Data Access](https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/data-access.html) +* [spring-framework WebMVC](https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html) +* [spring-boot reference](https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/html/) +* [spring-boot appendix-application-properties](https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/html/appendix-application-properties.html#common-application-properties) +* [spring-boot api](https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/api/) +* [spring-data-jpa](https://docs.spring.io/spring-data/jpa/docs/2.2.5.RELEASE/reference/html/#reference) + +### Gradle Plugins +* [org.springframework.boot](https://plugins.gradle.org/plugin/org.springframework.boot) +* [org.springframework.cloud.contract](https://plugins.gradle.org/plugin/org.springframework.cloud.contract) +* [io.spring.dependency-management](https://plugins.gradle.org/plugin/io.spring.dependency-management) +* [org.asciidoctor.jvm.convert](https://plugins.gradle.org/plugin/org.asciidoctor.jvm.convert) +* [com.avast.gradle.docker-compose](https://plugins.gradle.org/plugin/com.avast.gradle.docker-compose) +* [org.liquibase.gradle](https://plugins.gradle.org/plugin/org.liquibase.gradle) + +### Github Repos +* [spring-cloud-contract](https://github.com/spring-cloud/spring-cloud-contract) +* [dependency-management-plugin](https://github.com/spring-gradle-plugins/dependency-management-plugin) +* [asciidoctor-gradle-plugin](https://github.com/asciidoctor/asciidoctor-gradle-plugin) +* [gradle-docker-compose-plugin](https://github.com/avast/gradle-docker-compose-plugin) +* [liquibase-gradle-plugin](https://github.com/liquibase/liquibase-gradle-plugin) + +## Database and JPA +### DB Datatypes +* [H2 Datatypes](http://www.h2database.com/html/datatypes.html) +* [PostgreSQL Datatypes](https://www.postgresql.org/docs/11/datatype.html) +* LocalDateTime and TimeZone: TODO + +### UUID and Optimistic Locking +* UUID: TODO + +### Database Schema Evolution with Spring Boot JPA +* TODO +* org.flywaydb:flyway +* org.liquibase:liquibase https://www.liquibase.org/documentation/maven/index.html + + +## Frontend with webjars + +### updating webjar Versions: +* change Version in build.gradle "ext" (Line 40) +* change Version in src/main/resources/templates/layout/page.html Section head.tw-head and div.tw-footer (Lines 16, 98) diff --git a/etc/application_properties/application.properties_sample.txt b/etc/development/application.properties_sample.txt similarity index 97% rename from etc/application_properties/application.properties_sample.txt rename to etc/development/application.properties_sample.txt index 86e4f29b..df079878 100644 --- a/etc/application_properties/application.properties_sample.txt +++ b/etc/development/application.properties_sample.txt @@ -1,29 +1,29 @@ -spring.session.store-type=jdbc -spring.datasource.url=jdbc:postgresql://localhost:5432/simpleworklist -spring.datasource.username=simpleworklist -spring.datasource.password=simpleworklistpwd -spring.datasource.driver-class-name=org.postgresql.Driver -spring.jpa.hibernate.ddl-auto=create-drop -#spring.jpa.hibernate.ddl-auto=update -spring.jpa.show-sql=true -spring.jpa.hibernate.dialect=org.hibernate.dialect.PostgreSQL95Dialect -spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false -spring.thymeleaf.cache=false - -org.woehlke.simpleworklist.user.strengthBCryptPasswordEncoder=10 - -org.woehlke.simpleworklist.mail.host=******** -org.woehlke.simpleworklist.mail.port=465 -org.woehlke.simpleworklist.mail.username=******** -org.woehlke.simpleworklist.mail.password=******** -org.woehlke.simpleworklist.mail.smtp.auth=true -org.woehlke.simpleworklist.mail.smtp.sslEnable=true -org.woehlke.simpleworklist.mail.smtp.socketFactoryPort=465 -org.woehlke.simpleworklist.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory - -org.woehlke.simpleworklist.mvc.controllerPageSize=10 - -org.woehlke.simpleworklist.registration.maxRetries=5 -org.woehlke.simpleworklist.registration.ttlEmailVerificationRequest=86400000 -org.woehlke.simpleworklist.registration.urlHost=localhost:8080 -org.woehlke.simpleworklist.registration.mailFrom=******** +spring.session.store-type=jdbc +spring.datasource.url=jdbc:postgresql://localhost:5432/simpleworklist +spring.datasource.username=simpleworklist +spring.datasource.password=simpleworklistpwd +spring.datasource.driver-class-name=org.postgresql.Driver +spring.jpa.hibernate.ddl-auto=create-drop +#spring.jpa.hibernate.ddl-auto=update +spring.jpa.show-sql=true +spring.jpa.hibernate.dialect=org.hibernate.dialect.PostgreSQL95Dialect +spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false +spring.thymeleaf.cache=false + +org.woehlke.simpleworklist.user.strengthBCryptPasswordEncoder=10 + +org.woehlke.simpleworklist.mail.host=******** +org.woehlke.simpleworklist.mail.port=465 +org.woehlke.simpleworklist.mail.username=******** +org.woehlke.simpleworklist.mail.password=******** +org.woehlke.simpleworklist.mail.smtp.auth=true +org.woehlke.simpleworklist.mail.smtp.sslEnable=true +org.woehlke.simpleworklist.mail.smtp.socketFactoryPort=465 +org.woehlke.simpleworklist.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory + +org.woehlke.simpleworklist.mvc.controllerPageSize=10 + +org.woehlke.simpleworklist.registration.maxRetries=5 +org.woehlke.simpleworklist.registration.ttlEmailVerificationRequest=86400000 +org.woehlke.simpleworklist.registration.urlHost=localhost:8080 +org.woehlke.simpleworklist.registration.mailFrom=******** diff --git a/etc/application_properties/application.properties_test_sample.txt b/etc/development/application.properties_test_sample.txt similarity index 97% rename from etc/application_properties/application.properties_test_sample.txt rename to etc/development/application.properties_test_sample.txt index bd4259aa..c4a013eb 100644 --- a/etc/application_properties/application.properties_test_sample.txt +++ b/etc/development/application.properties_test_sample.txt @@ -1,29 +1,29 @@ -spring.session.store-type=jdbc -spring.datasource.url=jdbc:postgresql://localhost:5432/simpleworklisttest -spring.datasource.username=simpleworklist -spring.datasource.password=simpleworklistpwd -spring.datasource.driver-class-name=org.postgresql.Driver -spring.jpa.hibernate.ddl-auto=create-drop -#spring.jpa.hibernate.ddl-auto=update -spring.jpa.show-sql=true -spring.jpa.hibernate.dialect=org.hibernate.dialect.PostgreSQL95Dialect -spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false -spring.thymeleaf.cache=false - -org.woehlke.simpleworklist.user.strengthBCryptPasswordEncoder=10 - -org.woehlke.simpleworklist.mail.host=******** -org.woehlke.simpleworklist.mail.port=465 -org.woehlke.simpleworklist.mail.username=******** -org.woehlke.simpleworklist.mail.password=******** -org.woehlke.simpleworklist.mail.smtp.auth=true -org.woehlke.simpleworklist.mail.smtp.sslEnable=true -org.woehlke.simpleworklist.mail.smtp.socketFactoryPort=465 -org.woehlke.simpleworklist.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory - -org.woehlke.simpleworklist.mvc.controllerPageSize=10 - -org.woehlke.simpleworklist.registration.maxRetries=5 -org.woehlke.simpleworklist.registration.ttlEmailVerificationRequest=86400000 -org.woehlke.simpleworklist.registration.urlHost=localhost:8080 -org.woehlke.simpleworklist.registration.mailFrom=******** +spring.session.store-type=jdbc +spring.datasource.url=jdbc:postgresql://localhost:5432/simpleworklisttest +spring.datasource.username=simpleworklist +spring.datasource.password=simpleworklistpwd +spring.datasource.driver-class-name=org.postgresql.Driver +spring.jpa.hibernate.ddl-auto=create-drop +#spring.jpa.hibernate.ddl-auto=update +spring.jpa.show-sql=true +spring.jpa.hibernate.dialect=org.hibernate.dialect.PostgreSQL95Dialect +spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false +spring.thymeleaf.cache=false + +org.woehlke.simpleworklist.user.strengthBCryptPasswordEncoder=10 + +org.woehlke.simpleworklist.mail.host=******** +org.woehlke.simpleworklist.mail.port=465 +org.woehlke.simpleworklist.mail.username=******** +org.woehlke.simpleworklist.mail.password=******** +org.woehlke.simpleworklist.mail.smtp.auth=true +org.woehlke.simpleworklist.mail.smtp.sslEnable=true +org.woehlke.simpleworklist.mail.smtp.socketFactoryPort=465 +org.woehlke.simpleworklist.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory + +org.woehlke.simpleworklist.mvc.controllerPageSize=10 + +org.woehlke.simpleworklist.registration.maxRetries=5 +org.woehlke.simpleworklist.registration.ttlEmailVerificationRequest=86400000 +org.woehlke.simpleworklist.registration.urlHost=localhost:8080 +org.woehlke.simpleworklist.registration.mailFrom=******** diff --git a/etc/docs/deploying-spring-boot-apps.md b/etc/development/archiv/deploying-spring-boot-apps.md similarity index 97% rename from etc/docs/deploying-spring-boot-apps.md rename to etc/development/archiv/deploying-spring-boot-apps.md index b1f20e74..91a0d368 100644 --- a/etc/docs/deploying-spring-boot-apps.md +++ b/etc/development/archiv/deploying-spring-boot-apps.md @@ -1,254 +1,254 @@ -``` -:::-- rundoc -email = ENV['HEROKU_EMAIL'] || `heroku auth:whoami` - -Rundoc.configure do |config| - config.project_root = "deploying-spring-boot-apps" - config.filter_sensitive(email => "developer@example.com") -end -``` - - -The Spring Boot model of deploying standalone applications is a great -fit for Heroku. You can use either Maven or Gradle to deploy a Spring application on Heroku, but for this guide we'll assume that you're using Maven and have [Maven 3](http://maven.apache.org/download.html) installed on your machine. - -To begin, create a [free Heroku account](https://signup.heroku.com/). -Then download and install the Heroku CLI. - -Download the Heroku CLI - -Once installed, you can use the `heroku` command from the terminal to log in using the email address and password you used when creating your Heroku account: - -```term -$ heroku login -heroku: Press any key to open up the browser to login or q to exit - › Warning: If browser does not open, visit - › https://cli-auth.heroku.com/auth/browser/*** -heroku: Waiting for login... -Logging in... done -Logged in as me@example.com -``` - -To check that your key was added, run `heroku keys`. If your key isn’t there, you -can add it manually by running `heroku keys:add`. For more information about SSH -keys, see [Managing Your SSH Keys](https://devcenter.heroku.com/articles/keys). - -## Creating a Spring Boot app - -To create a new Spring Boot application, first install the Spring Boot CLI as described in the [Spring Boot documentation](https://docs.spring.io/spring-boot/docs/current/reference/html/cli-using-the-cli.html). This will add a `spring` command to your path. - ->note ->You can also start with a working [sample app](https://github.com/heroku/java-getting-started) if you'd prefer. - -Use the CLI to create a new application by running this command: - -```term -:::>- $ spring init --dependencies=web demo -``` - -Then move into the application directory: - -```term -:::>- $ cd demo -``` - -The application does not have any custom logic by default -- it's just an empty template. To add some behavior, open the `src/main/java/com/example/demo/DemoApplication.java` file and put the following code in it: - -```java -:::>> file.write src/main/java/com/example/demo/DemoApplication.java -package com.example.demo; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.web.bind.annotation.*; -import org.springframework.stereotype.*; - -@Controller -@SpringBootApplication -public class DemoApplication { - - @RequestMapping("/") - @ResponseBody - String home() { - return "Hello World!"; - } - - public static void main(String[] args) { - SpringApplication.run(DemoApplication.class, args); - } -} -``` - -This creates a simple request mapping that displayed "Hello World!" in the browser. You could run the application locally to confirm this, but we'll jump straight to running it on Heroku. - -## Preparing a Spring Boot app for Heroku - -Before you can deploy the app to Heroku, you'll need to create a Git repository for the application and add all of the code to it by running these commands: - -```term -:::>- $ git init -:::>- $ git add . -:::>- $ git commit -m "first commit" -``` - -You'll deploy the app by pushing this Git repo to Heroku. It's also possible to deploy using the [Heroku Maven plugin](deploying-java-applications-with-the-heroku-maven-plugin), but this guide will focus on using Git and the Heroku CLI. - -In order to deploy to Heroku, you'll first need to provision a new Heroku app. Run this command: - -```term -:::>> $ heroku create -``` - -This also creates a remote repository called `heroku` in -your local git repo. Heroku generates a random name (in this case `nameless-lake-8055`) -for your app. You can rename it later with the `heroku apps:rename` command. - -Now deploy your code: - -```term -:::>- $ git push heroku master -:::-> | $ (head -6; echo "..."; tail -18) -``` - -Heroku automatically detects the application as a Maven/Java app due to the presence of a `pom.xml` file. It installed Java 8 by default, but you can easily configure this with a `system.properties` file as described in the [Specifying a Java version](https://devcenter.heroku.com/articles/java-support#specifying-a-java-version) Dev Center article. It will run your app using the [default command](https://devcenter.heroku.com/articles/java-support#default-web-process-type). - -All that said, the application is now deployed. You can visit the app's URL by running this command: - -```term -:::>- $ heroku open -``` - -You'll see the "Hello World!" text in the browser. - -You can view the logs for the application by running this command: - -```term -:::>- background.start("heroku logs --tail", name: "tail", wait: "State changed from starting to up", timeout: 45) -:::-> | tail -10 -:::-- background.stop(name: "tail") -``` - -Reload your application in the browser, and you’ll see another log message generated for that request. Press `Control+C` to stop streaming the logs. - -To learn more about the basics of deploying a Maven-based Java application on Heroku, try following the [Getting Started with Java on Heroku](getting-started-with-java) guide. This guide covers many steps that are not specific to Spring Boot. - -The remainder of this article provides a cursory overview of some of the most common settings you'll need to adjust. - -## Connecting to a database - -You can attach a PostgreSQL database to your app by running the following command from the CLI: - -```term -:::>- $ heroku addons:create heroku-postgresql -``` - -If you prefer to use MySQL or another database vendor, check out [Add-ons Marketplace](https://elements.heroku.com/addons) to see what is available. - -Now you can list the configuration variables for your app to display the URL needed to connect to the database, DATABASE_URL: - -```term -:::>> $ heroku config -``` - -Heroku also provides a `pg` command that shows a lot more: - -```term -:::>> $ heroku pg -``` - -This indicates a hobby database (free) is running Postgres 9.3.3, with a single row of data. - -Once the database add-on has been created, Heroku will automatically populate the environment variables `SPRING_DATASOURCE_URL`, `SPRING_DATASOURCE_USERNAME`, and `SPRING_DATASOURCE_PASSWORD`. These environment variables should allow your Spring Boot application to connect to the database without any other configuration as long as you add a PostgreSQL JDBC driver to your dependencies like so: - -```xml -:::>> file.append("pom.xml#26") - - org.springframework.boot - spring-boot-starter-jdbc - - - org.postgresql - postgresql - -``` - -You can customize your application's database configuration in your `application.properties`. For example: - - -```properties -:::>> file.write src/main/resources/application.properties -spring.datasource.driverClassName=org.postgresql.Driver -spring.datasource.maxActive=10 -spring.datasource.maxIdle=5 -spring.datasource.minIdle=2 -spring.datasource.initialSize=5 -spring.datasource.removeAbandoned=true -``` - -Then you can then add a configuration bean to your app. - -```java -:::>> file.write src/main/java/demo/DatabaseConfig.java -package com.example.demo; - -import com.zaxxer.hikari.*; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.*; -import javax.sql.DataSource; - -@Configuration -public class DatabaseConfig { - - @Value("${spring.datasource.url}") - private String dbUrl; - - @Bean - public DataSource dataSource() { - HikariConfig config = new HikariConfig(); - config.setJdbcUrl(dbUrl); - return new HikariDataSource(config); - } -} -``` - -``` -:::-- $ git add . -:::-- $ git commit -m "database" -:::-- $ git push heroku master -:::-- $ cd .. -:::-- $ mv demo deploying-spring-boot-apps -``` - -For more information, see [Connecting to Relational Databases on Heroku with Java](articles/connecting-to-relational-databases-on-heroku-with-java). - -Now your application should be able to connect to the database. You can follow our guide on [Running Database Migrations for Java Apps](https://devcenter.heroku.com/articles/running-database-migrations-for-java-apps) to initialize the database. The [sample app](https://github.com/kissaten/spring-boot-heroku-demo) uses Liquibase. - -## Customizing the boot command - -You can override the default command used to run your app or define custom process types using a [`Procfile`](https://devcenter.heroku.com/articles/procfile). The correct command depends on what you need to do with your app. Common process types are used to [run a web process](https://devcenter.heroku.com/articles/java-support#default-web-process-type) or [run database migrations](https://devcenter.heroku.com/articles/running-database-migrations-for-java-apps). - -## Next steps - -For more complete examples of Spring Boot apps that run on Heroku see: - -* [Getting Started on Heroku with Java](articles/getting-started-with-java#introduction) -* [Spring Petclinic Demo for Heroku](https://github.com/kissaten/spring-petclinic) - -Heroku provides a wide range of features for Spring applications. You can provision -add-ons that introduce third-party cloud services like persistence, logging, monitoring and more. -The [add-on marketplace](https://elements.heroku.com/addons/#data-stores) has a large -number of data stores, from Redis and MongoDB providers, to Postgres and MySQL. - -You can read more about [How Heroku Works](https://devcenter.heroku.com/articles/how-heroku-works) -to get a technical overview of the concepts you’ll encounter while writing, configuring, deploying and running applications. -Then visit the [Java category on Dev Center](https://devcenter.heroku.com/categories/java-support) -to learn more about developing and deploying Spring applications. -If you experience any trouble with your application as you migrate to Heroku, reach out to any of our [Support channels](https://devcenter.heroku.com/articles/support-channels). - -For more information on deploying Spring apps, see the [Spring documentation](http://projects.spring.io/spring-boot/#quick-start) and the [Spring Boot documentation on deploy to Heroku](http://docs.spring.io/spring-boot/docs/current/reference/html/cloud-deployment.html#cloud-deployment-heroku). +``` +:::-- rundoc +email = ENV['HEROKU_EMAIL'] || `heroku auth:whoami` + +Rundoc.configure do |config| + config.project_root = "deploying-spring-boot-apps" + config.filter_sensitive(email => "developer@example.com") +end +``` + + +The Spring Boot model of deploying standalone applications is a great +fit for Heroku. You can use either Maven or Gradle to deploy a Spring application on Heroku, but for this guide we'll assume that you're using Maven and have [Maven 3](http://maven.apache.org/download.html) installed on your machine. + +To begin, create a [free Heroku account](https://signup.heroku.com/). +Then download and install the Heroku CLI. + +Download the Heroku CLI + +Once installed, you can use the `heroku` command from the terminal to log in using the email address and password you used when creating your Heroku account: + +```term +$ heroku login +heroku: Press any key to open up the browser to login or q to exit + › Warning: If browser does not open, visit + › https://cli-auth.heroku.com/auth/browser/*** +heroku: Waiting for login... +Logging in... done +Logged in as me@example.com +``` + +To check that your key was added, run `heroku keys`. If your key isn’t there, you +can add it manually by running `heroku keys:add`. For more information about SSH +keys, see [Managing Your SSH Keys](https://devcenter.heroku.com/articles/keys). + +## Creating a Spring Boot app + +To create a new Spring Boot application, first install the Spring Boot CLI as described in the [Spring Boot documentation](https://docs.spring.io/spring-boot/docs/current/reference/html/cli-using-the-cli.html). This will add a `spring` command to your path. + +>note +>You can also start with a working [sample app](https://github.com/heroku/java-getting-started) if you'd prefer. + +Use the CLI to create a new application by running this command: + +```term +:::>- $ spring init --dependencies=web demo +``` + +Then move into the application directory: + +```term +:::>- $ cd demo +``` + +The application does not have any custom logic by default -- it's just an empty template. To add some behavior, open the `src/main/java/com/example/demo/DemoApplication.java` file and put the following code in it: + +```java +:::>> file.write src/main/java/com/example/demo/DemoApplication.java +package com.example.demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.web.bind.annotation.*; +import org.springframework.stereotype.*; + +@Controller +@SpringBootApplication +public class DemoApplication { + + @RequestMapping("/") + @ResponseBody + String home() { + return "Hello World!"; + } + + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + } +} +``` + +This creates a simple request mapping that displayed "Hello World!" in the browser. You could run the application locally to confirm this, but we'll jump straight to running it on Heroku. + +## Preparing a Spring Boot app for Heroku + +Before you can deploy the app to Heroku, you'll need to create a Git repository for the application and add all of the code to it by running these commands: + +```term +:::>- $ git init +:::>- $ git add . +:::>- $ git commit -m "first commit" +``` + +You'll deploy the app by pushing this Git repo to Heroku. It's also possible to deploy using the [Heroku Maven plugin](deploying-java-applications-with-the-heroku-maven-plugin), but this guide will focus on using Git and the Heroku CLI. + +In order to deploy to Heroku, you'll first need to provision a new Heroku app. Run this command: + +```term +:::>> $ heroku create +``` + +This also creates a remote repository called `heroku` in +your local git repo. Heroku generates a random name (in this case `nameless-lake-8055`) +for your app. You can rename it later with the `heroku apps:rename` command. + +Now deploy your code: + +```term +:::>- $ git push heroku master +:::-> | $ (head -6; echo "..."; tail -18) +``` + +Heroku automatically detects the application as a Maven/Java app due to the presence of a `pom.xml` file. It installed Java 8 by default, but you can easily configure this with a `system.properties` file as described in the [Specifying a Java version](https://devcenter.heroku.com/articles/java-support#specifying-a-java-version) Dev Center article. It will run your app using the [default command](https://devcenter.heroku.com/articles/java-support#default-web-process-type). + +All that said, the application is now deployed. You can visit the app's URL by running this command: + +```term +:::>- $ heroku open +``` + +You'll see the "Hello World!" text in the browser. + +You can view the logs for the application by running this command: + +```term +:::>- background.start("heroku logs --tail", name: "tail", wait: "State changed from starting to up", timeout: 45) +:::-> | tail -10 +:::-- background.stop(name: "tail") +``` + +Reload your application in the browser, and you’ll see another log message generated for that request. Press `Control+C` to stop streaming the logs. + +To learn more about the basics of deploying a Maven-based Java application on Heroku, try following the [Getting Started with Java on Heroku](getting-started-with-java) guide. This guide covers many steps that are not specific to Spring Boot. + +The remainder of this article provides a cursory overview of some of the most common settings you'll need to adjust. + +## Connecting to a database + +You can attach a PostgreSQL database to your app by running the following command from the CLI: + +```term +:::>- $ heroku addons:create heroku-postgresql +``` + +If you prefer to use MySQL or another database vendor, check out [Add-ons Marketplace](https://elements.heroku.com/addons) to see what is available. + +Now you can list the configuration variables for your app to display the URL needed to connect to the database, DATABASE_URL: + +```term +:::>> $ heroku config +``` + +Heroku also provides a `pg` command that shows a lot more: + +```term +:::>> $ heroku pg +``` + +This indicates a hobby database (free) is running Postgres 9.3.3, with a single row of data. + +Once the database add-on has been created, Heroku will automatically populate the environment variables `SPRING_DATASOURCE_URL`, `SPRING_DATASOURCE_USERNAME`, and `SPRING_DATASOURCE_PASSWORD`. These environment variables should allow your Spring Boot application to connect to the database without any other configuration as long as you add a PostgreSQL JDBC driver to your dependencies like so: + +```xml +:::>> file.append("pom.xml#26") + + org.springframework.boot + spring-boot-starter-jdbc + + + org.postgresql + postgresql + +``` + +You can customize your application's database configuration in your `application.properties`. For example: + + +```properties +:::>> file.write src/main/resources/application.properties +spring.datasource.driverClassName=org.postgresql.Driver +spring.datasource.maxActive=10 +spring.datasource.maxIdle=5 +spring.datasource.minIdle=2 +spring.datasource.initialSize=5 +spring.datasource.removeAbandoned=true +``` + +Then you can then add a configuration bean to your app. + +```java +:::>> file.write src/main/java/demo/DatabaseConfig.java +package com.example.demo; + +import com.zaxxer.hikari.*; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.*; +import javax.sql.DataSource; + +@Configuration +public class DatabaseConfig { + + @Value("${spring.datasource.url}") + private String dbUrl; + + @Bean + public DataSource dataSource() { + HikariConfig config = new HikariConfig(); + config.setJdbcUrl(dbUrl); + return new HikariDataSource(config); + } +} +``` + +``` +:::-- $ git add . +:::-- $ git commit -m "database" +:::-- $ git push heroku master +:::-- $ cd .. +:::-- $ mv demo deploying-spring-boot-apps +``` + +For more information, see [Connecting to Relational Databases on Heroku with Java](articles/connecting-to-relational-databases-on-heroku-with-java). + +Now your application should be able to connect to the database. You can follow our guide on [Running Database Migrations for Java Apps](https://devcenter.heroku.com/articles/running-database-migrations-for-java-apps) to initialize the database. The [sample app](https://github.com/kissaten/spring-boot-heroku-demo) uses Liquibase. + +## Customizing the boot command + +You can override the default command used to run your app or define custom process types using a [`Procfile`](https://devcenter.heroku.com/articles/procfile). The correct command depends on what you need to do with your app. Common process types are used to [run a web process](https://devcenter.heroku.com/articles/java-support#default-web-process-type) or [run database migrations](https://devcenter.heroku.com/articles/running-database-migrations-for-java-apps). + +## Next steps + +For more complete examples of Spring Boot apps that run on Heroku see: + +* [Getting Started on Heroku with Java](articles/getting-started-with-java#introduction) +* [Spring Petclinic Demo for Heroku](https://github.com/kissaten/spring-petclinic) + +Heroku provides a wide range of features for Spring applications. You can provision +add-ons that introduce third-party cloud services like persistence, logging, monitoring and more. +The [add-on marketplace](https://elements.heroku.com/addons/#data-stores) has a large +number of data stores, from Redis and MongoDB providers, to Postgres and MySQL. + +You can read more about [How Heroku Works](https://devcenter.heroku.com/articles/how-heroku-works) +to get a technical overview of the concepts you’ll encounter while writing, configuring, deploying and running applications. +Then visit the [Java category on Dev Center](https://devcenter.heroku.com/categories/java-support) +to learn more about developing and deploying Spring applications. +If you experience any trouble with your application as you migrate to Heroku, reach out to any of our [Support channels](https://devcenter.heroku.com/articles/support-channels). + +For more information on deploying Spring apps, see the [Spring documentation](http://projects.spring.io/spring-boot/#quick-start) and the [Spring Boot documentation on deploy to Heroku](http://docs.spring.io/spring-boot/docs/current/reference/html/cloud-deployment.html#cloud-deployment-heroku). diff --git a/etc/docs/java-getting-started.md b/etc/development/archiv/java-getting-started.md similarity index 97% rename from etc/docs/java-getting-started.md rename to etc/development/archiv/java-getting-started.md index 0577695c..c63ccdd0 100644 --- a/etc/docs/java-getting-started.md +++ b/etc/development/archiv/java-getting-started.md @@ -1,554 +1,554 @@ -``` -:::-- rundoc -email = ENV['HEROKU_EMAIL'] || `heroku auth:whoami` - -Rundoc.configure do |config| - config.project_root = "java-getting-started" - config.filter_sensitive(email => "developer@example.com") -end -``` - - -

Introduction

- -This tutorial will have you deploying a Java app in minutes. - -Hang on for a few more minutes to learn how it all works, so you can make the most out of Heroku. - -The tutorial assumes that you already have: - -* A free Heroku account -* Java 8 installed -* Maven 3 installed - -If you'd prefer to use Gradle instead of Maven, please see the [Getting Started with Gradle on Heroku](getting-started-with-gradle-on-heroku) guide. - -

Set up

- ->callout ->The Heroku CLI requires **Git**, the popular version control system. If you don't already have Git installed, complete the following before proceeding: -> -> * Git installation -> * First-time Git setup - -In this step you'll install the Heroku Command Line Interface (CLI). You use the CLI to manage and scale your applications, provision add-ons, view your application logs, and run your application locally. - -Download and run the installer for your platform: - -
-
-
-
-
macOS
-

- Download the installer

-

Also available via Homebrew:

-
$ brew install heroku/brew/heroku
-
-
-
Windows
-

Download the appropriate installer for your Windows installation:

-

- 64-bit installer

-

32-bit installer

-
-
-
-
-
Ubuntu 16+
-

Run the following from your terminal:

-
$ sudo snap install heroku --classic
-

Snap is available on other Linux OS's as well. -

-
-
-
-
- -When installation completes, you can use the `heroku` command from your terminal. - -
On Windows, start the Command Prompt (cmd.exe) or Powershell to access the command shell.
- -Use the `heroku login` command to log in to the Heroku CLI: - -```term -$ heroku login -heroku: Press any key to open up the browser to login or q to exit - › Warning: If browser does not open, visit - › https://cli-auth.heroku.com/auth/browser/*** -heroku: Waiting for login... -Logging in... done -Logged in as me@example.com -``` - -This command opens your web browser to the Heroku login page. If your browser is already logged in to Heroku, simply click the **Log in** button displayed on the page. - -This authentication is required for both the `heroku` and `git` commands to work correctly. - -Note that if you’re behind a firewall that requires use of a proxy to connect with external HTTP/HTTPS services, [you can set the `HTTP_PROXY` or `HTTPS_PROXY` environment variables](articles/using-the-cli#using-an-http-proxy) in your local development environment before running the `heroku` command. - -

Prepare the app

- -In this step, you will prepare a sample application that's ready to be deployed to Heroku. - ->callout ->If you are new to Heroku, it is recommended that you ->complete this tutorial using the Heroku-provided sample application. -> ->However, if you have your own existing application that you want to deploy ->instead, see this article ->to learn how to prepare it for Heroku deployment. - -To create a local copy of a sample app that you can deploy to Heroku, execute the following commands in your local command shell or terminal: - - -```term -:::>- $ git clone https://github.com/heroku/java-getting-started -:::>- $ cd java-getting-started -:::-- $ git fetch -:::-- $ git merge origin/master -``` - -You now have a functioning Git repository that contains a simple Java application. The application includes a `pom.xml` file, which is used by Java's dependency manager, Maven. - -

Deploy the app

- -In this step you'll deploy the sample app to Heroku. - -First, create an app on Heroku, which prepares Heroku to receive your source code: - -```term -:::>> $ heroku create -``` - -When you create an app, a Git remote (named `heroku`) is also created and associated with your local Git repository. - -By default, Heroku generates a random name (in this case `warm-eyrie-9006`) for your app. You can pass a parameter to specify your own app name. - -Now deploy your code: - -```term -:::>- $ git push heroku master -:::-> | $ (head -6; echo "..."; tail -18) -``` - -The application is now deployed. Ensure that at least one instance of the app is running: - -```term -:::>- $ heroku ps:scale web=1 -``` - -Now visit the app at the URL generated by its app name. As a handy shortcut, you can open the website like so: - -```term -:::>- $ heroku open -``` - -

View logs

- -Heroku aggregates all of the output streams from both your app and the platform's components into a single channel of time-ordered logs. - -View information about your running app using the `heroku logs --tail` command: - -```term -:::>- background.start("heroku logs --tail", name: "tail", wait: "State changed from starting to up", timeout: 45) -:::-> | tail -10 -:::-- background.stop(name: "tail") -``` - -Visit your application in the browser again to generate another log message. - -Press `CTRL+C` to stop streaming logs. - -

Define a Procfile

- -Heroku apps use a special plaintext file called the [Procfile](procfile) to explicitly declare what command should be executed to start your app. - -The `Procfile` in the example app you deployed looks like this: - -```yaml -:::-> $ cat Procfile -``` - -This declares a single process type, `web`, and the command needed to run it. The name `web` is important here. It declares that this process type will be attached to Heroku's [HTTP routing](http-routing) stack, and it will be able to receive web traffic. - -Procfiles can contain additional process types. For example, you might declare one for a background worker that processes items off of a queue. - -

Scale the app

- -Right now, your app is running on a single web [dyno](dynos). A dyno is a lightweight Linux container that runs the command specified in your `Procfile`. - -You can check how many dynos are running using the `heroku ps` command: - -```term -:::>> $ heroku ps -``` - -By default, your app is deployed on a free dyno. Free dynos sleep after thirty minutes of inactivity (i.e., if they don't receive any traffic). This causes a delay of a few seconds for the first request upon waking. Subsequent requests will perform normally. - -Free dynos consume from a monthly, account-level quota of [free dyno hours](free-dyno-hours). As long as the quota is not exhausted, your free apps can continue to run. - -To avoid dyno sleeping, you can upgrade to a hobby or professional dyno type as described in [Dyno Types](dyno-types). For example, if you migrate your app to a professional dyno, you can easily scale it by running a command telling Heroku to spin up a specific number of dynos, each running your web process type. - -Scaling an application on Heroku is equivalent to changing the number of dynos that are running. - -Scale the number of web dynos to zero: - -```term -:::>- $ heroku ps:scale web=0 -``` - -Access the app again by refreshing your browser or running `heroku open`. You will get an error message because your app no longer has any web dynos available to serve requests. - -Scale it up again: - -```term -:::>- $ heroku ps:scale web=1 -``` - -To prevent abuse, scaling a non-free application to more than one dyno requires [account verification](account-verification). - -

Declare app dependencies

- -Heroku automatically identifies an app as a Java app if it contains a `pom.xml` file in the root directory. You can create a `pom.xml` file for your own apps with the `mvn archetype:create` command. - -The demo app you deployed already has a `pom.xml` ([see it here](https://github.com/heroku/java-getting-started/blob/master/pom.xml)). Here's an excerpt: - -```xml -:::-> $ sed -n '27,35p' pom.xml -``` - -The `pom.xml` file specifies dependencies that should be installed with your application. When an app is deployed, Heroku reads this file and installs the dependencies by running `mvn clean install`. - -Another file, `system.properties`, indicates the version of Java to use (Heroku supports many [different versions](java-support#supported-java-versions)). The contents of this optional file are straightforward: - -``` -:::-> $ cat system.properties -``` - -Run `mvn clean install` in your local directory to install the dependencies, preparing your system for running the app locally. Note that this app requires Java 8, but you can push your own apps using a different version of Java. - -```term -:::>- $ mvn clean install -:::-> | $ (echo "..."; tail -7) -``` - -If you do not have Maven installed, or get an error like `'mvn' is not recognized as an internal or external command`, then you can use the wrapper command instead by running `mvnw clean install` on Windows or `./mvnw clean install` on Mac and Linux. This both installs Maven and runs the Maven command. - -The Maven process compiles and build a JAR, with dependencies, placing it into your application's `target` directory. This process is accomplished with the `spring-boot-maven-plugin` in the `pom.xml`. - -If you aren't using Spring in your app, you can accomplish this with the following plugin configuration in the `pom.xml` file. - -```xml - - maven-assembly-plugin - 3.0.0 - - - jar-with-dependencies - - helloworld - - -``` - -Once dependencies are installed, you can run your app locally. - -

Run the app locally

- -Start your application locally with the `heroku local` CLI command (make sure you've already run `mvn clean install`): - -```term -:::>- background.start("heroku local web", name: "local1", wait: "Tomcat started", timeout: 30) -:::-> | $ (echo "..."; tail -4) -:::-- background.stop(name: "local1") -``` - -Just like the Heroku platform, `heroku local` examines your `Procfile` to determine what command to run. - -Open [http://localhost:5000](http://localhost:5000) with your web browser. You should see your app running locally. - -To stop the app from running locally, go back to your terminal window and press `CTRL+C` to exit. - -

Push local changes

- -In this step you'll learn how to make local changes to your app and deploy them to Heroku. As an example, you'll add a dependency and some code that uses it. - -Modify `pom.xml` to include a dependency for `jscience` by adding the following code inside the `` element: - -```xml -:::>> file.append pom.xml#28 - - org.jscience - jscience - 4.3.1 - -``` - -Now add the following `import` statements to `src/main/java/com/example/Main.java` to import the library: - -```java -:::>> file.append src/main/java/com/example/Main.java#19 -import static javax.measure.unit.SI.KILOGRAM; -import javax.measure.quantity.Mass; -import org.jscience.physics.model.RelativisticModel; -import org.jscience.physics.amount.Amount; -``` - -Add the following `hello ` method to `Main.java`: - -```java -:::>> file.append src/main/java/com/example/Main.java#59 -@RequestMapping("/hello") -String hello(Map model) { - RelativisticModel.select(); - Amount m = Amount.valueOf("12 GeV").to(KILOGRAM); - model.put("science", "E=mc^2: 12 GeV = " + m.toString()); - return "hello"; -} -``` - -Finally, create a `src/main/resources/templates/hello.html` file with these contents: - -```xml -:::>> file.write src/main/resources/templates/hello.html - - - -
-

-

- - -``` - -[Here's the final source code](https://github.com/heroku/java-getting-started/blob/localchanges/src/main/java/com/example/Main.java) for `Main.java` - yours should look similar. [Here's a diff](https://github.com/heroku/java-getting-started/compare/localchanges) of all the local changes you should have made. - -Now test your changes locally: - -```term -:::>- $ mvn clean install -:::-> | $ (echo "..."; tail -7) -:::>- background.start("heroku local web", name: "local2", wait: "Tomcat started", timeout: 30) -:::-> | $ (echo "..."; tail -4) -:::-- background.stop(name: "local2") -``` - -Visiting your application's `/hello` path at [http://localhost:5000/hello](http://localhost:5000/hello), you should see some great scientific conversions displayed: - - E=mc^2: 12 GeV = (2.139194076302506E-26 ± 1.4E-42) kg - -Now you can deploy. Almost every Heroku deployment follows this same pattern. First, use the `git add` command to stage your modified files for commit: - -```term -:::>- $ git add . -``` - -Next, commit the changes to the repository: - -```term -:::>- $ git commit -m "Demo" -``` - -Now deploy, just as you did previously: - -```term -:::>- $ git push heroku master -``` - -Finally, check that your updated code is successfully deployed: - -```term -:::>- $ heroku open hello -``` - -

Define config vars

- -Heroku lets you externalize your app's configuration by storing data such as encryption keys or external resource addresses in [config vars](config-vars). - -At runtime, config vars are exposed to your app as environment variables. For example, modify `src/main/java/com/example/Main.java` so that the method obtains an energy value from the `ENERGY` environment variable: - -``` -:::-- $ sed -e '56,68d' src/main/java/com/example/Main.java -``` - -```java -:::>> file.append("src/main/java/com/example/Main.java#56") -@RequestMapping("/hello") -String hello(Map model) { - RelativisticModel.select(); - String energy = System.getenv().get("ENERGY"); - if (energy == null) { - energy = "12 GeV"; - } - Amount m = Amount.valueOf(energy).to(KILOGRAM); - model.put("science", "E=mc^2: " + energy + " = " + m.toString()); - return "hello"; -} -``` - -Now compile the app again so that this change is integrated by running `mvn clean install`. - -`heroku local` automatically sets up your local environment based on the contents of the `.env` file in your app's root directory. Your sample app already includes a `.env` file with the following contents: - -``` -ENERGY=20 GeV -``` - ->warning ->Your own apps should _not_ commit the `.env` file to version control, because it often includes secure credentials. Include `.env` in your repo's `.gitignore` file. - -If you run the app with `heroku local` and visit it at [http://localhost:5000/hello](http://localhost:5000/hello), you'll see the conversion value for 20 GeV. - -To set the config var on Heroku, execute the following: - -```term -:::>> $ heroku config:set ENERGY="20 GeV" -``` - -View the config vars that are set using `heroku config`: - -```term -:::>> $ heroku config -``` - -Deploy your updated application to Heroku to see this in action. - -

Start a one-off dyno

- -The `heroku run` command lets you run maintenance and administrative tasks on your app in a [one-off dyno](one-off-dynos). It can also lets you launch a REPL process attached to your local terminal for experimenting in your app's environment, or code that you deployed with your application: - -```term -:::>- $ heroku run java -version -:::-> | $ tail -4 -``` - -If you receive an error, `Error connecting to process`, then you might need to [configure your firewall](one-off-dynos#timeout-awaiting-process). - -Don’t forget to type `exit` to exit the shell and terminate the dyno. - -

Provision add-ons

- -Add-ons are cloud services that provide additional services for your application, such as databases, logging, and monitoring. - -By default, Heroku stores your app's 1500 most recent log lines. However, the full log stream is available as a service, and several logging add-ons are available that provide features such as log persistence, search, and alerting. - -In this step you'll provision one of these logging add-ons, Papertrail. - -Provision the [Papertrail](papertrail) add-on like so: - -```term -:::>> $ heroku addons:create papertrail -``` - ->callout ->To help prevent abuse, provisioning an add-on requires [account verification](account-verification). If your account has not been verified, you will be directed to visit the [verification site](https://heroku.com/verify). - -The add-on is now deployed and configured for your application. You can list your app's active add-ons like so: - -```term -:::>- $ heroku addons -``` - -To see this particular add-on in action, visit your application's Heroku URL a few times. Each visit generates more log messages, which should now be routed to the Papertrail add-on. Visit the Papertrail console to see the log messages: - -```term -:::>- $ heroku addons:open papertrail -``` - -Your browser will open up a Papertrail web console that shows the latest log events. The interface lets you search and set up alerts: - -![Image](https://s3.amazonaws.com/heroku-devcenter-files/article-images/2205-imported-1443570572-2205-imported-1443555048-360-original.jpg 'add-on sample output') - -

Use a database

- -Heroku provides managed data services for Postgres and Redis, and the [add-on marketplace](https://elements.heroku.com/addons/categories/data-stores) provides a variety of additional data services, including MongoDB and MySQL. - -In this step you'll learn about the free Heroku Postgres add-on that is provisioned automatically with all Java app deploys. - -Heroku Postgres is itself an add-on, so you can use the `heroku addons` command for an overview of the database provisioned for your app: - -```term -:::>> $ heroku addons -``` - -Listing your app's config vars will display the URL that your app is using to connect to the database (`DATABASE_URL`): - -```term -:::>> $ heroku config -``` - -The `heroku pg` command provides more in-depth information on your app's Heroku Postgres databases: - -```term -:::>> $ heroku pg -``` - -This indicates that the app has a `Hobby-dev` database (the free plan), running Postgres 9.3.3, currently with zero rows of data. - -The example app you deployed already has database functionality, which you can reach by visiting your app's `/db` path. For example, if your app's root URL is `https://wonderful-app-287.herokuapp.com/` then visit `https://wonderful-app-287.herokuapp.com/db`. - -The code to access the database is straightforward. Here's the method to insert values into a table called `tick`: - -```java -:::-> $ sed -n '45,50p;78,109p' src/main/java/com/example/Main.java -``` - -This ensures that when you access your app using the `/db` route, a new row is added to the `tick` table, and all rows are then returned so that they can be rendered in the output. - -The HikariCP database connection pool is initialized with the configuration value `spring.datasource.url`, which is defined in `src/main/resources/application.properties` like this: - -``` -:::-> $ sed -n '1p' src/main/resources/application.properties -``` - -This sets `spring.datasource.url` to the value in the `JDBC_DATABASE_URL` environment variable, [set by the database add-on](articles/connecting-to-relational-databases-on-heroku-with-java), and establishes a pool of connections to the database. - -Deploy your changes to Heroku. Now, when you access your app's `/db` route, you will see something like this: - -``` -Database Output -* Read from DB: 2014-08-08 14:48:25.155241 -* Read from DB: 2014-08-08 14:51:32.287816 -* Read from DB: 2014-08-08 14:51:52.667683 -``` - -Assuming that you have [Postgres installed locally](heroku-postgresql#local-setup), use the `heroku pg:psql` command to connect to the remote database and see all the rows: - -```term -$ heroku pg:psql -psql (10.1, server 9.6.10) -SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) -Type "help" for help. - -DATABASE=> SELECT * FROM ticks; - tick ----------------------------- -2018-03-01 20:53:27.148139 -2018-03-01 20:53:29.288995 -2018-03-01 20:53:29.957118 -2018-03-01 21:07:28.880162 -(4 rows) -=> \q -``` - -Read more about [Heroku PostgreSQL](heroku-postgresql). - -A similar technique can be used to install [MongoDB or Redis add-ons](https://elements.heroku.com/addons/categories/data-stores). - - -## Next steps - -Congratulations! You now know how to deploy an app, change its configuration, scale it, view logs, and attach add-ons. - -Here's some recommended reading to continue your Heroku journey: - -* [How Heroku Works](how-heroku-works) provides a technical overview of the concepts you’ll encounter while writing, configuring, deploying, and running apps. -* The [Java category](/categories/java-support) provides more in-depth information on developing and deploying Java apps. -* The [Deployment category](/categories/deployment) provides a variety of powerful integrations and features to help streamline and simplify your deployments. +``` +:::-- rundoc +email = ENV['HEROKU_EMAIL'] || `heroku auth:whoami` + +Rundoc.configure do |config| + config.project_root = "java-getting-started" + config.filter_sensitive(email => "developer@example.com") +end +``` + + +

Introduction

+ +This tutorial will have you deploying a Java app in minutes. + +Hang on for a few more minutes to learn how it all works, so you can make the most out of Heroku. + +The tutorial assumes that you already have: + +* A free Heroku account +* Java 8 installed +* Maven 3 installed + +If you'd prefer to use Gradle instead of Maven, please see the [Getting Started with Gradle on Heroku](getting-started-with-gradle-on-heroku) guide. + +

Set up

+ +>callout +>The Heroku CLI requires **Git**, the popular version control system. If you don't already have Git installed, complete the following before proceeding: +> +> * Git installation +> * First-time Git setup + +In this step you'll install the Heroku Command Line Interface (CLI). You use the CLI to manage and scale your applications, provision add-ons, view your application logs, and run your application locally. + +Download and run the installer for your platform: + +
+
+
+
+
macOS
+

+ Download the installer

+

Also available via Homebrew:

+
$ brew install heroku/brew/heroku
+
+
+
Windows
+

Download the appropriate installer for your Windows installation:

+

+ 64-bit installer

+

32-bit installer

+
+
+
+
+
Ubuntu 16+
+

Run the following from your terminal:

+
$ sudo snap install heroku --classic
+

Snap is available on other Linux OS's as well. +

+
+
+
+
+ +When installation completes, you can use the `heroku` command from your terminal. + +
On Windows, start the Command Prompt (cmd.exe) or Powershell to access the command shell.
+ +Use the `heroku login` command to log in to the Heroku CLI: + +```term +$ heroku login +heroku: Press any key to open up the browser to login or q to exit + › Warning: If browser does not open, visit + › https://cli-auth.heroku.com/auth/browser/*** +heroku: Waiting for login... +Logging in... done +Logged in as me@example.com +``` + +This command opens your web browser to the Heroku login page. If your browser is already logged in to Heroku, simply click the **Log in** button displayed on the page. + +This authentication is required for both the `heroku` and `git` commands to work correctly. + +Note that if you’re behind a firewall that requires use of a proxy to connect with external HTTP/HTTPS services, [you can set the `HTTP_PROXY` or `HTTPS_PROXY` environment variables](articles/using-the-cli#using-an-http-proxy) in your local development environment before running the `heroku` command. + +

Prepare the app

+ +In this step, you will prepare a sample application that's ready to be deployed to Heroku. + +>callout +>If you are new to Heroku, it is recommended that you +>complete this tutorial using the Heroku-provided sample application. +> +>However, if you have your own existing application that you want to deploy +>instead, see this article +>to learn how to prepare it for Heroku deployment. + +To create a local copy of a sample app that you can deploy to Heroku, execute the following commands in your local command shell or terminal: + + +```term +:::>- $ git clone https://github.com/heroku/java-getting-started +:::>- $ cd java-getting-started +:::-- $ git fetch +:::-- $ git merge origin/master +``` + +You now have a functioning Git repository that contains a simple Java application. The application includes a `pom.xml` file, which is used by Java's dependency manager, Maven. + +

Deploy the app

+ +In this step you'll deploy the sample app to Heroku. + +First, create an app on Heroku, which prepares Heroku to receive your source code: + +```term +:::>> $ heroku create +``` + +When you create an app, a Git remote (named `heroku`) is also created and associated with your local Git repository. + +By default, Heroku generates a random name (in this case `warm-eyrie-9006`) for your app. You can pass a parameter to specify your own app name. + +Now deploy your code: + +```term +:::>- $ git push heroku master +:::-> | $ (head -6; echo "..."; tail -18) +``` + +The application is now deployed. Ensure that at least one instance of the app is running: + +```term +:::>- $ heroku ps:scale web=1 +``` + +Now visit the app at the URL generated by its app name. As a handy shortcut, you can open the website like so: + +```term +:::>- $ heroku open +``` + +

View logs

+ +Heroku aggregates all of the output streams from both your app and the platform's components into a single channel of time-ordered logs. + +View information about your running app using the `heroku logs --tail` command: + +```term +:::>- background.start("heroku logs --tail", name: "tail", wait: "State changed from starting to up", timeout: 45) +:::-> | tail -10 +:::-- background.stop(name: "tail") +``` + +Visit your application in the browser again to generate another log message. + +Press `CTRL+C` to stop streaming logs. + +

Define a Procfile

+ +Heroku apps use a special plaintext file called the [Procfile](procfile) to explicitly declare what command should be executed to start your app. + +The `Procfile` in the example app you deployed looks like this: + +```yaml +:::-> $ cat Procfile +``` + +This declares a single process type, `web`, and the command needed to run it. The name `web` is important here. It declares that this process type will be attached to Heroku's [HTTP routing](http-routing) stack, and it will be able to receive web traffic. + +Procfiles can contain additional process types. For example, you might declare one for a background worker that processes items off of a queue. + +

Scale the app

+ +Right now, your app is running on a single web [dyno](dynos). A dyno is a lightweight Linux container that runs the command specified in your `Procfile`. + +You can check how many dynos are running using the `heroku ps` command: + +```term +:::>> $ heroku ps +``` + +By default, your app is deployed on a free dyno. Free dynos sleep after thirty minutes of inactivity (i.e., if they don't receive any traffic). This causes a delay of a few seconds for the first request upon waking. Subsequent requests will perform normally. + +Free dynos consume from a monthly, account-level quota of [free dyno hours](free-dyno-hours). As long as the quota is not exhausted, your free apps can continue to run. + +To avoid dyno sleeping, you can upgrade to a hobby or professional dyno type as described in [Dyno Types](dyno-types). For example, if you migrate your app to a professional dyno, you can easily scale it by running a command telling Heroku to spin up a specific number of dynos, each running your web process type. + +Scaling an application on Heroku is equivalent to changing the number of dynos that are running. + +Scale the number of web dynos to zero: + +```term +:::>- $ heroku ps:scale web=0 +``` + +Access the app again by refreshing your browser or running `heroku open`. You will get an error message because your app no longer has any web dynos available to serve requests. + +Scale it up again: + +```term +:::>- $ heroku ps:scale web=1 +``` + +To prevent abuse, scaling a non-free application to more than one dyno requires [account verification](account-verification). + +

Declare app dependencies

+ +Heroku automatically identifies an app as a Java app if it contains a `pom.xml` file in the root directory. You can create a `pom.xml` file for your own apps with the `mvn archetype:create` command. + +The demo app you deployed already has a `pom.xml` ([see it here](https://github.com/heroku/java-getting-started/blob/master/pom.xml)). Here's an excerpt: + +```xml +:::-> $ sed -n '27,35p' pom.xml +``` + +The `pom.xml` file specifies dependencies that should be installed with your application. When an app is deployed, Heroku reads this file and installs the dependencies by running `mvn clean install`. + +Another file, `system.properties`, indicates the version of Java to use (Heroku supports many [different versions](java-support#supported-java-versions)). The contents of this optional file are straightforward: + +``` +:::-> $ cat system.properties +``` + +Run `mvn clean install` in your local directory to install the dependencies, preparing your system for running the app locally. Note that this app requires Java 8, but you can push your own apps using a different version of Java. + +```term +:::>- $ mvn clean install +:::-> | $ (echo "..."; tail -7) +``` + +If you do not have Maven installed, or get an error like `'mvn' is not recognized as an internal or external command`, then you can use the wrapper command instead by running `mvnw clean install` on Windows or `./mvnw clean install` on Mac and Linux. This both installs Maven and runs the Maven command. + +The Maven process compiles and build a JAR, with dependencies, placing it into your application's `target` directory. This process is accomplished with the `spring-boot-maven-plugin` in the `pom.xml`. + +If you aren't using Spring in your app, you can accomplish this with the following plugin configuration in the `pom.xml` file. + +```xml + + maven-assembly-plugin + 3.0.0 + + + jar-with-dependencies + + helloworld + + +``` + +Once dependencies are installed, you can run your app locally. + +

Run the app locally

+ +Start your application locally with the `heroku local` CLI command (make sure you've already run `mvn clean install`): + +```term +:::>- background.start("heroku local web", name: "local1", wait: "Tomcat started", timeout: 30) +:::-> | $ (echo "..."; tail -4) +:::-- background.stop(name: "local1") +``` + +Just like the Heroku platform, `heroku local` examines your `Procfile` to determine what command to run. + +Open [http://localhost:5000](http://localhost:5000) with your web browser. You should see your app running locally. + +To stop the app from running locally, go back to your terminal window and press `CTRL+C` to exit. + +

Push local changes

+ +In this step you'll learn how to make local changes to your app and deploy them to Heroku. As an example, you'll add a dependency and some code that uses it. + +Modify `pom.xml` to include a dependency for `jscience` by adding the following code inside the `` element: + +```xml +:::>> file.append pom.xml#28 + + org.jscience + jscience + 4.3.1 + +``` + +Now add the following `import` statements to `src/main/java/com/example/Main.java` to import the library: + +```java +:::>> file.append src/main/java/com/example/Main.java#19 +import static javax.measure.unit.SI.KILOGRAM; +import javax.measure.quantity.Mass; +import org.jscience.physics.model.RelativisticModel; +import org.jscience.physics.amount.Amount; +``` + +Add the following `hello ` method to `Main.java`: + +```java +:::>> file.append src/main/java/com/example/Main.java#59 +@RequestMapping("/hello") +String hello(Map model) { + RelativisticModel.select(); + Amount m = Amount.valueOf("12 GeV").to(KILOGRAM); + model.put("science", "E=mc^2: 12 GeV = " + m.toString()); + return "hello"; +} +``` + +Finally, create a `src/main/resources/templates/hello.html` file with these contents: + +```xml +:::>> file.write src/main/resources/templates/hello.html + + + +
+

+

+ + +``` + +[Here's the final source code](https://github.com/heroku/java-getting-started/blob/localchanges/src/main/java/com/example/Main.java) for `Main.java` - yours should look similar. [Here's a diff](https://github.com/heroku/java-getting-started/compare/localchanges) of all the local changes you should have made. + +Now test your changes locally: + +```term +:::>- $ mvn clean install +:::-> | $ (echo "..."; tail -7) +:::>- background.start("heroku local web", name: "local2", wait: "Tomcat started", timeout: 30) +:::-> | $ (echo "..."; tail -4) +:::-- background.stop(name: "local2") +``` + +Visiting your application's `/hello` path at [http://localhost:5000/hello](http://localhost:5000/hello), you should see some great scientific conversions displayed: + + E=mc^2: 12 GeV = (2.139194076302506E-26 ± 1.4E-42) kg + +Now you can deploy. Almost every Heroku deployment follows this same pattern. First, use the `git add` command to stage your modified files for commit: + +```term +:::>- $ git add . +``` + +Next, commit the changes to the repository: + +```term +:::>- $ git commit -m "Demo" +``` + +Now deploy, just as you did previously: + +```term +:::>- $ git push heroku master +``` + +Finally, check that your updated code is successfully deployed: + +```term +:::>- $ heroku open hello +``` + +

Define config vars

+ +Heroku lets you externalize your app's configuration by storing data such as encryption keys or external resource addresses in [config vars](config-vars). + +At runtime, config vars are exposed to your app as environment variables. For example, modify `src/main/java/com/example/Main.java` so that the method obtains an energy value from the `ENERGY` environment variable: + +``` +:::-- $ sed -e '56,68d' src/main/java/com/example/Main.java +``` + +```java +:::>> file.append("src/main/java/com/example/Main.java#56") +@RequestMapping("/hello") +String hello(Map model) { + RelativisticModel.select(); + String energy = System.getenv().get("ENERGY"); + if (energy == null) { + energy = "12 GeV"; + } + Amount m = Amount.valueOf(energy).to(KILOGRAM); + model.put("science", "E=mc^2: " + energy + " = " + m.toString()); + return "hello"; +} +``` + +Now compile the app again so that this change is integrated by running `mvn clean install`. + +`heroku local` automatically sets up your local environment based on the contents of the `.env` file in your app's root directory. Your sample app already includes a `.env` file with the following contents: + +``` +ENERGY=20 GeV +``` + +>warning +>Your own apps should _not_ commit the `.env` file to version control, because it often includes secure credentials. Include `.env` in your repo's `.gitignore` file. + +If you run the app with `heroku local` and visit it at [http://localhost:5000/hello](http://localhost:5000/hello), you'll see the conversion value for 20 GeV. + +To set the config var on Heroku, execute the following: + +```term +:::>> $ heroku config:set ENERGY="20 GeV" +``` + +View the config vars that are set using `heroku config`: + +```term +:::>> $ heroku config +``` + +Deploy your updated application to Heroku to see this in action. + +

Start a one-off dyno

+ +The `heroku run` command lets you run maintenance and administrative tasks on your app in a [one-off dyno](one-off-dynos). It can also lets you launch a REPL process attached to your local terminal for experimenting in your app's environment, or code that you deployed with your application: + +```term +:::>- $ heroku run java -version +:::-> | $ tail -4 +``` + +If you receive an error, `Error connecting to process`, then you might need to [configure your firewall](one-off-dynos#timeout-awaiting-process). + +Don’t forget to type `exit` to exit the shell and terminate the dyno. + +

Provision add-ons

+ +Add-ons are cloud services that provide additional services for your application, such as databases, logging, and monitoring. + +By default, Heroku stores your app's 1500 most recent log lines. However, the full log stream is available as a service, and several logging add-ons are available that provide features such as log persistence, search, and alerting. + +In this step you'll provision one of these logging add-ons, Papertrail. + +Provision the [Papertrail](papertrail) add-on like so: + +```term +:::>> $ heroku addons:create papertrail +``` + +>callout +>To help prevent abuse, provisioning an add-on requires [account verification](account-verification). If your account has not been verified, you will be directed to visit the [verification site](https://heroku.com/verify). + +The add-on is now deployed and configured for your application. You can list your app's active add-ons like so: + +```term +:::>- $ heroku addons +``` + +To see this particular add-on in action, visit your application's Heroku URL a few times. Each visit generates more log messages, which should now be routed to the Papertrail add-on. Visit the Papertrail console to see the log messages: + +```term +:::>- $ heroku addons:open papertrail +``` + +Your browser will open up a Papertrail web console that shows the latest log events. The interface lets you search and set up alerts: + +![Image](https://s3.amazonaws.com/heroku-devcenter-files/article-images/2205-imported-1443570572-2205-imported-1443555048-360-original.jpg 'add-on sample output') + +

Use a database

+ +Heroku provides managed data services for Postgres and Redis, and the [add-on marketplace](https://elements.heroku.com/addons/categories/data-stores) provides a variety of additional data services, including MongoDB and MySQL. + +In this step you'll learn about the free Heroku Postgres add-on that is provisioned automatically with all Java app deploys. + +Heroku Postgres is itself an add-on, so you can use the `heroku addons` command for an overview of the database provisioned for your app: + +```term +:::>> $ heroku addons +``` + +Listing your app's config vars will display the URL that your app is using to connect to the database (`DATABASE_URL`): + +```term +:::>> $ heroku config +``` + +The `heroku pg` command provides more in-depth information on your app's Heroku Postgres databases: + +```term +:::>> $ heroku pg +``` + +This indicates that the app has a `Hobby-dev` database (the free plan), running Postgres 9.3.3, currently with zero rows of data. + +The example app you deployed already has database functionality, which you can reach by visiting your app's `/db` path. For example, if your app's root URL is `https://wonderful-app-287.herokuapp.com/` then visit `https://wonderful-app-287.herokuapp.com/db`. + +The code to access the database is straightforward. Here's the method to insert values into a table called `tick`: + +```java +:::-> $ sed -n '45,50p;78,109p' src/main/java/com/example/Main.java +``` + +This ensures that when you access your app using the `/db` route, a new row is added to the `tick` table, and all rows are then returned so that they can be rendered in the output. + +The HikariCP database connection pool is initialized with the configuration value `spring.datasource.url`, which is defined in `src/main/resources/application.properties` like this: + +``` +:::-> $ sed -n '1p' src/main/resources/application.properties +``` + +This sets `spring.datasource.url` to the value in the `JDBC_DATABASE_URL` environment variable, [set by the database add-on](articles/connecting-to-relational-databases-on-heroku-with-java), and establishes a pool of connections to the database. + +Deploy your changes to Heroku. Now, when you access your app's `/db` route, you will see something like this: + +``` +Database Output +* Read from DB: 2014-08-08 14:48:25.155241 +* Read from DB: 2014-08-08 14:51:32.287816 +* Read from DB: 2014-08-08 14:51:52.667683 +``` + +Assuming that you have [Postgres installed locally](heroku-postgresql#local-setup), use the `heroku pg:psql` command to connect to the remote database and see all the rows: + +```term +$ heroku pg:psql +psql (10.1, server 9.6.10) +SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) +Type "help" for help. + +DATABASE=> SELECT * FROM ticks; + tick +---------------------------- +2018-03-01 20:53:27.148139 +2018-03-01 20:53:29.288995 +2018-03-01 20:53:29.957118 +2018-03-01 21:07:28.880162 +(4 rows) +=> \q +``` + +Read more about [Heroku PostgreSQL](heroku-postgresql). + +A similar technique can be used to install [MongoDB or Redis add-ons](https://elements.heroku.com/addons/categories/data-stores). + + +## Next steps + +Congratulations! You now know how to deploy an app, change its configuration, scale it, view logs, and attach add-ons. + +Here's some recommended reading to continue your Heroku journey: + +* [How Heroku Works](how-heroku-works) provides a technical overview of the concepts you’ll encounter while writing, configuring, deploying, and running apps. +* The [Java category](/categories/java-support) provides more in-depth information on developing and deploying Java apps. +* The [Deployment category](/categories/deployment) provides a variety of powerful integrations and features to help streamline and simplify your deployments. diff --git a/etc/postgresql/db-createdb-and-user.sql b/etc/development/db-createdb-and-user.sql similarity index 100% rename from etc/postgresql/db-createdb-and-user.sql rename to etc/development/db-createdb-and-user.sql diff --git a/etc/engineering/Engineering.md b/etc/engineering/Engineering.md deleted file mode 100644 index 961cac4d..00000000 --- a/etc/engineering/Engineering.md +++ /dev/null @@ -1 +0,0 @@ -# Engineering diff --git a/etc/requirements/Nonfunctional_Requirements.md b/etc/requirements/Nonfunctional_Requirements.md new file mode 100644 index 00000000..2fa851dd --- /dev/null +++ b/etc/requirements/Nonfunctional_Requirements.md @@ -0,0 +1,30 @@ +# Nonfunctional Requirements + +## NF001 Runtime Components +### PostgreSQL Database +### PostgreSQL Database CLI +### Embedded java Servlet Container (Apache Tomcat) +### spring-boot +### spring-boot-web +### spring-boot-jpa +### spring-session-jdbc +## NF002 Development Systems: Local Machine +### Windows10 +### Linux +### bash +### git +### java +### maven +### Database PostgreSQL +#### Docker +#### Local Service +### IDE +#### IntelliJ +#### SpringToolSuite in Eclipse +## NF003 Development Systems: Github +## NF004 Development Systems: Continous Integration Service +## NF004 Development Systems: Heroku +## NF005 Continous Integration: Spring/Maven Unit and Integration Tests +## NF007 Deployment on Heroku +## NF007 Deployment on Heroku: Database Schema Changes + diff --git a/etc/requirements/requirements.odt b/etc/requirements/Nonfunctional_Requirements.odt similarity index 100% rename from etc/requirements/requirements.odt rename to etc/requirements/Nonfunctional_Requirements.odt diff --git a/etc/requirements/requirements.md b/etc/requirements/Requirements.md similarity index 86% rename from etc/requirements/requirements.md rename to etc/requirements/Requirements.md index 387183a7..e2b6ef15 100644 --- a/etc/requirements/requirements.md +++ b/etc/requirements/Requirements.md @@ -1,6 +1,4 @@ -# Requirements - -# User Stories +# Functional Requirements ## F001 Server Starts @@ -20,5 +18,3 @@ - - diff --git a/etc/requirements/Requirements.odt b/etc/requirements/Requirements.odt new file mode 100644 index 00000000..301152ff Binary files /dev/null and b/etc/requirements/Requirements.odt differ diff --git a/etc/requirements/uml/SimpleWorklist.mdzip b/etc/requirements/uml/SimpleWorklist.mdzip deleted file mode 100644 index c44bb044..00000000 Binary files a/etc/requirements/uml/SimpleWorklist.mdzip and /dev/null differ diff --git a/etc/engineering/uml/SimpleWorklist.mdzip b/etc/uml/SimpleWorklist.mdzip similarity index 100% rename from etc/engineering/uml/SimpleWorklist.mdzip rename to etc/uml/SimpleWorklist.mdzip diff --git a/run.sh b/run.sh index 157a44d7..bd8cafd3 100755 --- a/run.sh +++ b/run.sh @@ -2,8 +2,6 @@ source setenv.sh - - function runDev() { ./mvnw }