{"id":15988820,"url":"https://github.com/michael-simons/w-jax2016","last_synced_at":"2025-10-12T14:10:32.014Z","repository":{"id":139304842,"uuid":"67608177","full_name":"michael-simons/W-JAX2016","owner":"michael-simons","description":"Slides and demo code for my talk at W-JAX2016","archived":false,"fork":false,"pushed_at":"2016-11-15T13:43:14.000Z","size":2685,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-25T01:53:56.193Z","etag":null,"topics":["banner","demo","spring-boot","starter","talk"],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/michael-simons.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-09-07T13:17:53.000Z","updated_at":"2017-03-08T20:37:46.000Z","dependencies_parsed_at":"2024-08-01T09:00:21.164Z","dependency_job_id":null,"html_url":"https://github.com/michael-simons/W-JAX2016","commit_stats":{"total_commits":41,"total_committers":1,"mean_commits":41.0,"dds":0.0,"last_synced_commit":"956695d701b1420ebd71bc8057043df91820b5aa"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/michael-simons/W-JAX2016","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michael-simons%2FW-JAX2016","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michael-simons%2FW-JAX2016/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michael-simons%2FW-JAX2016/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michael-simons%2FW-JAX2016/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/michael-simons","download_url":"https://codeload.github.com/michael-simons/W-JAX2016/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michael-simons%2FW-JAX2016/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279011544,"owners_count":26084963,"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","status":"online","status_checked_at":"2025-10-12T02:00:06.719Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["banner","demo","spring-boot","starter","talk"],"created_at":"2024-10-08T04:21:30.664Z","updated_at":"2025-10-12T14:10:31.985Z","avatar_url":"https://github.com/michael-simons.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Keine Magie: Individuelle Spring-Boot-Module\n\n**Important:** _The commits and commit messages have been written very carefully to guide you through reading this project and understanding the talk. Please take your time to study them if you don't understand something_.\n\n**Wichtig:** _Die Commits und die Kommentare sind sehr ausführlich und beinhalten  wichtige Teile des Vortrages. Vielleicht helfen sie weiter, wenn etwas unverständlich ist._\n\n## Slides\n\nThe slides are inside this repository and also on Speakerdeck:\n\n[Keine Magie: Individuelle Spring-Boot-Module](https://speakerdeck.com/michaelsimons/keine-magie-individuelle-spring-boot-module)\n\n\n## Vortrag auf der W-JAX 2016\n\n_Note: The talk and the slides are in German as W-JAX con is a German conference, the demo, the readme and other artifacts inside this repo are in English in hope they are useful to a broader audience._\n\nDieses Repository beinhaltet den Foliensatz und die komplette Demo des Vortrages.\n\nDas Ziel des Vortrages ist, zu zeigen, dass die automatische Konfiguration des Spring Frameworks durch Spring Boot keine Magie ist und wie man sich die Möglichkeiten automatischer Konfiguration zu nutze machen kann.\n\nDas Beispiel des Vortrag ist ein eigener Dialekt für die Template Engine [Thymeleaef](http://www.thymeleaf.org). Es wird ein HTML Tag entwickelt, dass den [Spring Boot Banner](http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-banner) als ASCII Art innerhalb eines Thymeleaf Templates anzeigen kann.\n\nDabei werden folgende Themen demonstriert:\n\n* Der korrekte Weg, aus einer _Configuration_ Klasse eine _AutoConfiguration_ Klasse zu machen, die innerhalb eines _*-spring-boot-starter.jar_ automatisch ohne einen \"Full-Classpath-Scan\" gefunden wird\n* Vorstellung der Annotationen `ConditionalOnClass`, `ConditionalOnProperty`, `ConditionalOnBean` sowie deren Negationen\n* Möglichkeiten zum Debugging automatischer Konfiguration\n\n## Fragen und Antworten\n\nWährend des Vortrags kam die Frage auf, wie man die Benutzer eines Starters bei der Konfiguration desselben unterstützen könne. \n\nDie üblichen Java IDEs NetBeans, Eclipse und IntelliJ bieten eine Autovervollständigung für die Properties aller möglichen Starter.\n\nDieses Feature kann sehr einfach für eigene Starter realisiert werden. In [Appendix B. Configuration meta-data](http://docs.spring.io/spring-boot/docs/current/reference/html/configuration-metadata.html) wird beschrieben, wie eine Datei `META-INF/spring-configuration-metadata.json` aussehen muss, die die relevanten Informationen beinhaltet.\n\nSetzt man in seinem Starter Klassen ein, die mit `@ConfigurationProperties` annotiert sind, um seine Properties zentral zur Verfügung hab und hat die Attribute der Klassen ordentlich mit JavaDoc Kommentaren dokumentieren, kann obige Datei generieren lassen:\n\n```\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n      \u003cartifactId\u003espring-boot-configuration-processor\u003c/artifactId\u003e\n      \u003coptional\u003etrue\u003c/optional\u003e\n    \u003c/dependency\u003e\n```\n\nIn meinem [wro4j-spring-boot-starter](https://github.com/michael-simons/wro4j-spring-boot-starter) habe ich dies im Commit [#a59b3f4](https://github.com/michael-simons/wro4j-spring-boot-starter/commit/a59b3f4341825f83304c9db3e0daaddf9552096f) exemplarisch gemacht, das Ergebnis ist direkt sichtbar:\n\n![Support of configuration properties](slides/documented-starter-properties.png)\n\n## Weitere Informationen\n\nDer Vortrag existiert auch in einer [englischen Version](https://github.com/michael-simons/springio2016), die auf der [Spring I/O 2016](http://www.springio.net) vorgestellt wurde. Ein Videomitschnitt ist auf YouTube zu sehen: [Customize your Spring Boot experience by writing your own Spring Boot starter](https://www.youtube.com/watch?v=wSWA63rZfGo).\n\n## Kontakt\n\nGerne über [michael-simons.eu](http://michael-simons.eu) oder Twitter, ich bin [@rotnroll666](https://twitter.com/@rotnroll666).\n\n## License\n\n\u003ca rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\"\u003e\u003cimg alt=\"Creative Commons Lizenzvertrag\" style=\"border-width:0\" src=\"https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png\" /\u003e\u003c/a\u003e\u003cbr /\u003e\u003cspan xmlns:dct=\"http://purl.org/dc/terms/\" property=\"dct:title\"\u003e\"Keine Magie: Individuelle Spring-Boot-Module\"\u003c/span\u003e von \u003ca xmlns:cc=\"http://creativecommons.org/ns#\" href=\"https://github.com/michael-simons/W-JAX2016\" property=\"cc:attributionName\" rel=\"cc:attributionURL\"\u003eMichael J. Simons\u003c/a\u003e ist lizenziert unter einer \u003ca rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\"\u003eCreative Commons Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 4.0 International Lizenz\u003c/a\u003e.\n\n## Bildrechte der Präsentation\n\n* \"High Voltage Towers\": © iStockphoto.com/[querbeet](http://www.istockphoto.com/portfolio/querbeet)\n* \"Old New Architecture Winnipeg\": © iStockphoto.com/[photosmash](http://www.istockphoto.com/portfolio/photosmash)\n* \"Freddie Mercury\": Still from Queens 1986 \"A Kind Of Magic\" music video","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichael-simons%2Fw-jax2016","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichael-simons%2Fw-jax2016","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichael-simons%2Fw-jax2016/lists"}